我有一个有两个列的表:test_name(文本),created_at(日期)。
当我使用这段代码时:
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月份(Created_at)=1”,则在第一行中得到‘延迟杯游戏’;
如果我在代码中添加“WHERE月份(Created_at)=2”,则在第一行中得到了“Yawan预热”;
似乎系统总是选择test_name的第一行,我不知道这是否是MySQL规则。
发布于 2019-01-11 09:54:05
对于5.7之前的mysql版本,这种shuold会发生,但是最近的版本应该会引发一个错误。在最新版本中,此行为由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;https://stackoverflow.com/questions/54143033
复制相似问题