У меня есть таблица, которая выглядит так
CREATE TABLE `purchases` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`totalAmount` INT(10) NOT NULL DEFAULT '0',
`storeId` INT(10) NOT NULL DEFAULT '0',
`purchaseDate` DATETIME NOT NULL,
PRIMARY KEY (`id`)
)
Я хочу подсчитать все покупки в определенный день, поэтому у меня есть этот оператор SQL, который делает это
SELECT DATE_FORMAT(purchaseDate, '%m-%d-%Y') AS date, COUNT(id) AS totalPurchases FROM purchases GROUP BY DATE(purchaseDate)
Это возвращает мне что-то вроде этого
date totalPurchases
11-18-2010 5
11-19-2010 10
11-20-2010 10
Поскольку каждая покупка привязана к магазину, мне было интересно, есть ли запрос, который добавит 3 столбца к этому набору результатов с подсчетом покупок, которые произошли в каждом магазине, чтобы дать мне что-то вроде этого
date totalPurchases store1 store2 store3
11-18-2010 5 2 1 2
11-19-2010 10 4 1 5
11-20-2010 10 3 4 3
Заранее спасибо!
2 ответа
SELECT DATE_FORMAT(purchaseDate, '%m-%d-%Y') AS date,
COUNT(*) AS totalPurchases,
SUM(IF(storeId = 1, 1, 0)) AS store1,
SUM(IF(storeId = 2, 1, 0)) AS store2,
SUM(IF(storeId = 3, 1, 0)) AS store3
FROM purchases
GROUP BY DATE(purchaseDate)
Возможно, вы могли бы использовать для этого ROLLUP, ознакомьтесь с документацией здесь
Похожие вопросы
Новые вопросы
mysql
MySQL — это бесплатная система управления реляционными базами данных (RDBMS) с открытым исходным кодом, которая использует язык структурированных запросов (SQL). НЕ ИСПОЛЬЗУЙТЕ этот тег для других БД, таких как SQL Server, SQLite и т. д. Это разные БД, которые используют свои собственные диалекты SQL для управления данными. В вопросе всегда указывайте точную версию сервера. Версии 5.x сильно отличаются по своим возможностям от версий 8+.