Получить сумму полей
Возможный дубликат:
Данные подсчета MySQL за последние 7 дней
У меня есть проблема, где мне нужно показать сумму полей. Допустим, у меня есть набор записей следующим образом,
detectDate |isp |infection | count
--------------------------------------
2012-10-02 01:00|aaaa |malware |3
2012-10-02 01:30|bbbb |malware |2
2012-10-02 01:33|bbbb |spy-eye |2
2012-10-02 01:45|aaaa |DDos |1
2012-10-03 01:50|cccc |malware |2
2012-10-03 02:00|dddd |TDSS |2
2012-10-03 04:50|dddd |TDSS |3
И я хочу отобразить вывод, который будет отображать сумму всех инфекций для каждого дня следующим образом,
detectDate |infection | count
-------------------------------
2012-10-02 |DDos |1
2012-10-02 |malware |5
2012-10-02 |spy-eye |2
2012-10-02 |TDSS |0
2012-10-03 |DDos |0
2012-10-03 |malware |2
2012-10-03 |spy-eye |0
2012-10-03 |TDSS |5
Я использовал этот запрос,
SELECT DATE_FORMAT( detectDate, '%Y-%m-%d' ) AS detectDate, infection, SUM( count )
FROM `tbl_correlateddata`
GROUP BY DATE_FORMAT( detectDate, '%Y-%m-%d' ) , infection
но это только дает следующий результат, который НЕ является моим требованием..
detectDate |infection | count
-------------------------------
2012-10-02 |DDos |1
2012-10-02 |malware |5
2012-10-02 |spy-eye |2
2012-10-03 |malware |2
2012-10-03 |TDSS |5
любая помощь будет очень полезна:) Большое спасибо:) высоко ценится:)
РЕДАКТИРОВАТЬ: Возможный дубликат: MySQL Count данных за последние 7 дней
но не похоже
1 ответ
Решение
SELECT e.*, COALESCE(SUM(d.`count`),0) `SUM of count`
FROM
(
SELECT c.detectDate, a.infection
FROM
(
SELECT DISTINCT infection
FROM tbl_correlateddata
) a CROSS JOIN
(
SELECT DISTINCT DATE(detectDate) detectDate
FROM tbl_correlateddata
) c
) e LEFT JOIN tbl_correlateddata d
ON DATE(d.detectDate) = e.detectDate AND
d.infection = e.infection
GROUP BY detectDate, infection
ORDER BY e.detectDate, e.infection
или же
SELECT DATE_FORMAT(e.detectDate, '%Y-%m-%d' ),
e.infection,
COALESCE(SUM(d.`count`),0) `SUM of count`
FROM
(
SELECT c.detectDate, a.infection
FROM
(
SELECT DISTINCT infection
FROM tbl_correlateddata
) a CROSS JOIN
(
SELECT DISTINCT DATE(detectDate) detectDate
FROM tbl_correlateddata
) c
) e LEFT JOIN tbl_correlateddata d
ON DATE(d.detectDate) = e.detectDate AND
d.infection = e.infection
GROUP BY e.detectDate, e.infection
ORDER BY e.detectDate, e.infection