Итак, придумать название для этого сложно
SELECT Date(p.born_at), SUM(p.value) as 'total_value_for_day'
FROM puppies as p
WHERE p.status = 2
GROUP BY DATE(p.born_at);
Итак, это дает результат в 2 столбца.
Я хочу это:
столбцы:
date | status = 1 | status = 2 | status = 3
DATA!!!
есть ли способ сделать это?
SELECT Date(p.born_at),
SUM(case when status = 1 then p.value end) as 'status = 1',
SUM(case when status = 2 then p.value end) as 'status = 2',
SUM(case when status = 3 then p.value end) as 'status = 3'
FROM puppies as p
WHERE p.status in(1,2,3)
GROUP BY DATE(p.born_at);
WHERE
потенциально избежать обработки ненужных строк , если у вас есть те , где статус не 1,2 или 3. Если все строки имеют один из этих значений , то это, вероятно , будет лучше удалить его , чтобы избежать избыточной проверки.
SELECT
DATE(p.born_at)
, SUM(CASE WHEN STATUS = 1 THEN p.value END) AS 'Status = 1'
, SUM(CASE WHEN STATUS = 2 THEN p.value END) AS 'Status = 2'
, SUM(CASE WHEN STATUS = 3 THEN p.value END) AS 'Status = 3'
FROM puppies AS p
WHERE p.status IN(1, 2, 3)
GROUP BY DATE(p.born_at);
SELECT Date(born_at),
SUM(case when Status = 1 then value else 0 end) as 'status = 1',
SUM(case when Status = 2 then value else 0 end) as 'status = 2',
SUM(case when Status = 3 then value else 0 end) as 'status = 3'
FROM puppies
GROUP BY DATE(born_at);