我有一个包含两列的表:test_name(text),created_at(date)。
当我使用这段代码时:
SELECT test_name, MONTH(created_at) AS Month, COUNT(created_at) AS Num_Completed_Tests
FROM complete_tests
GROUP BY Month;
我的问题是:每个月都有几个不同的test_name,但是此代码并未导致错误。
添加一些内容
当我执行此代码时,我得到了:
test_name Month Num_Completed_Tests
Delayed Cup Game 1 11068
Yawn Warm-up 2 9122
Yawn Warm-up 3
如果我在代码中添加“ WHERE MONTH(created_at)= 1”,则第一行显示“ Delayed Cup Game”;
如果我在代码中添加“ WHERE MONTH(created_at)= 2”,则在第一行中会出现“打哈欠热身”;
好像系统总是选择FIRST行的test_name,我不知道这是否是MySQL规则。
答案 0 :(得分:0)
此shuold发生在5.7之前的mysql版本上,但是最新版本应引发错误..该行为是通过SQL_MODE设置管理的最新版本..
无论如何,对于承认该结果的mysql版本,该列的结果不涉及聚集函数且未提及 不可预测(返回检索到的临时值)如果此列的结果不重要,则应使用(伪)聚合函数进行管理。
SELECT min(test_name)
, MONTH(created_at) AS Month
, COUNT(created_at) AS Num_Completed_Tests
FROM complete_tests
GROUP BY Month;
或在需要详细结果的情况下按分组添加列
SELECT test_name
, MONTH(created_at) AS Month
, COUNT(created_at) AS Num_Completed_Tests
FROM complete_tests
GROUP BY test_name, Month;