MySQL: запрос для сортировки данных на основе атрибута другого столбца

0

Итак, придумать название для этого сложно

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!!!

есть ли способ сделать это?

  • 0
    Можете ли вы уточнить результат, который вы хотите? Похоже, вам нужно 4 столбца, первый - это дата, а для следующих трех столбцов вы хотите получить данные для соответствующего статуса. Например, если status = 3, заполните данные в этом столбце. Это правильно? Это действительно прояснит ваш вопрос, если вы приведете пример вывода с подготовленными данными.
Теги:
pivot

3 ответа

1
Лучший ответ
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);
  • 0
    лучше использовать ГДЕ или не использовать ГДЕ?
  • 0
    Зависит от ваших данных! Использование WHERE потенциально избежать обработки ненужных строк , если у вас есть те , где статус не 1,2 или 3. Если все строки имеют один из этих значений , то это, вероятно , будет лучше удалить его , чтобы избежать избыточной проверки.
1
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);
1
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); 
  • 0
    лучше использовать ГДЕ или не использовать ГДЕ?
  • 0
    Если у вас есть более 3 возможных статусов, я бы использовал предложение WHERE. Непонятно из твоего вопроса ...
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню