不在DAY,MONTH和YEAR的GROUP BY中

时间:2018-07-10 11:33:17

标签: mysql group-by

我在使用 ONLY_FULL_GROUP_BY 模式时遇到了麻烦(我不想,但是我不得不这样做)。 问题是这需要我在group by子句中包括一列。这是我需要选择的列(这是时间戳列),但需要按“日,月和年”分组。 像这样:

SELECT COUNT(id) AS howmuch, date_event 
FROM mytable AS st 
WHERE date_event BETWEEN SUBDATE(CURDATE(), 7) AND NOW() 
GROUP BY DAY(date_event), MONTH(date_event), YEAR(date_event) 
ORDER BY date_event

但这会引发错误:

'mydb.st.date_event' isn't in GROUP BY

因为date_event不在GROUP BY中,因为它不能。 如果我将date_event添加到分组依据,查询将起作用,但是从逻辑上讲,它不会返回我想要的内容(我需要知道该数据库表中有多少项(按天分组)。

有人提示如何实现这一目标吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

从定义上讲,一天不是独立的抽象,而是一个月和一年的时间。因此,您可以在查询中选择日期,月份和年份:

<a class="button" href="#"><span>Text</span></a>

但是我们可以通过按SELECT DAY(date_event), MONTH(date_event), YEAR(date_event), COUNT(id) AS howmuch FROM mytable WHERE date_event BETWEEN SUBDATE(CURDATE(), 7) AND NOW() GROUP BY DAY(date_event), MONTH(date_event), YEAR(date_event) ORDER BY YEAR(date_event), MONTH(date_event), DAY(date_event); 进行分组来使其更加简洁:

DATE(date_event)