deadbyelpy
@deadbyelpy
веб-шмеб

MySQL. Как сделать группировку для каждого условия в where?

Собственно запрос:

SELECT st.id, st.name, st.date_time, bs.date_time 
  FROM stat as st 
  LEFT JOIN bonus as bs ON st.date_time = bs.date_time 
  WHERE st.name IN('lol', 'strange') 
  GROUP BY MONTH(st.date_time)


stat:
id - int, name - varchar(), date_time = datetime

bonus:
id - int, data = varchar, date_time = datetime

Что в итоге - группировка по месяцу идет, но st.name то один то другой, а надо бы чтобы для каждого была группировка по месяцу.
SELECT для каждого не подойдет, полей - условий больше чем 1 name

Т.е. чтобы вывод был:

id name Month
1 lol April
2 strange April
1 lol May
2 strange May
  • Вопрос задан
  • 2903 просмотра
Решения вопроса 2
morozovdenis
@morozovdenis
SELECT st.id AS id, st.name AS name, MONTH(st.date_time) AS Month 
  FROM stat as st 
  LEFT JOIN bonus as bs ON st.date_time = bs.date_time 
  WHERE st.name IN('lol', 'strange') 
  GROUP BY st.id, st.name, MONTH(st.date_time)
Ответ написан
deadbyelpy
@deadbyelpy Автор вопроса
веб-шмеб
@morozovdenis почти верно написал

SELECT st.id AS id, st.name AS name, MONTH(st.date_time) AS Month
FROM stat as st
LEFT JOIN bonus as bs ON st.date_time = bs.date_time
WHERE st.name IN('lol', 'strange')
GROUP BY MONTH(st.date_time), st.name
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
AxisPod
@AxisPod
Не боитесь, что БД скажет: "Ну у вас и запросы" и зависнет? Оптимизаторам БД в аду показывают планы выполнения таких запросов.
Ответ написан
@kuznetsovin
SELECT DISTINCT st.id, st.name, MONTH(st.date_time) 
  FROM stat as st 
  LEFT JOIN bonus as bs ON st.date_time = bs.date_time 
  WHERE st.name IN('lol', 'strange') 
ORDER BY st.id, st.name
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы