首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当使用SQL时,一个组可能有几个不同的值

当使用SQL时,一个组可能有几个不同的值
EN

Stack Overflow用户
提问于 2019-01-11 08:46:08
回答 1查看 50关注 0票数 1

我有一个有两个列的表:test_name(文本),created_at(日期)。

当我使用这段代码时:

代码语言:javascript
复制
SELECT test_name, MONTH(created_at) AS Month, COUNT(created_at) AS Num_Completed_Tests
FROM complete_tests
GROUP BY Month;

我的问题是:每个月都有几个不同的test_name,但是这段代码并没有导致错误。

添加了一些内容

当我执行这段代码时,我得到:

代码语言:javascript
复制
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规则。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-11 09:54:05

对于5.7之前的mysql版本,这种shuold会发生,但是最近的版本应该会引发一个错误。在最新版本中,此行为由SQL_MODE设置管理。

无论如何,对于承认这一点的mysql版本,对于不涉及聚类函数的列的结果是不可预测的(返回临时检索的第一个值)。

如果这个列的结果不重要,您应该使用一个(假)聚合函数来管理它。

代码语言:javascript
复制
SELECT min(test_name)
  , MONTH(created_at) AS Month
  , COUNT(created_at) AS Num_Completed_Tests
FROM complete_tests
GROUP BY Month;

如果需要详细的结果,则按组添加列。

代码语言:javascript
复制
SELECT test_name
  , MONTH(created_at) AS Month
  , COUNT(created_at) AS Num_Completed_Tests
FROM complete_tests
GROUP BY test_name, Month;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54143033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档