使用SQL GROUP BY时,一个“组”可能具有多个不同的值

时间:2019-01-11 08:46:08

标签: mysql sql

我有一个包含两列的表: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规则。

1 个答案:

答案 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;