📅  最后修改于: 2023-12-03 15:12:21.620000             🧑  作者: Mango
当我们在编写 SQL 查询语句时,通常会用到 GROUP BY 子句来对结果进行分组统计。但是当我们在选择列表中使用了未在 GROUP BY 子句中出现的列时,就会出现“选择列表不在 GROUP BY 子句中”的错误。这是因为在 GROUP BY 子句的作用下,查询结果需要按照分组的列进行聚合,而未被包含在 GROUP BY 子句中的列是无法被合法聚合的。下面是一个例子:
SELECT name, COUNT(*)
FROM students
GROUP BY grade;
在这个例子中,我们想要统计每个年级有多少名学生。我们使用了 name 和 COUNT(*) 两列来进行统计。但是由于我们未将 name 列放在 GROUP BY 子句中,所以查询会返回“选择列表不在 GROUP BY 子句中”的错误。
要解决这个问题,我们需要将未在 GROUP BY 子句中的列进行聚合操作。在上面的例子中,我们可以将 name 列使用聚合函数进行操作,比如使用 MAX() 函数获取每个分组中的最大值:
SELECT MAX(name), COUNT(*)
FROM students
GROUP BY grade;
这样就能正确地获取每个年级有多少名学生了。
总之,在编写 SQL 查询时,一定要注意选择列表中的每一列是否都被包含在 GROUP BY 子句中或进行了聚合操作。