У меня есть таблица, которая выглядит так

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

Заранее спасибо!

0
Girish Dusane 22 Ноя 2010 в 08:48

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)
3
zerkms 22 Ноя 2010 в 08:53

Возможно, вы могли бы использовать для этого ROLLUP, ознакомьтесь с документацией здесь

0
ZaQ 22 Ноя 2010 в 08:51