Получить сумму полей

Возможный дубликат:
Данные подсчета 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
Другие вопросы по тегам