📜  选择列表不在 group by 子句中 - SQL (1)

📅  最后修改于: 2023-12-03 15:12:21.620000             🧑  作者: Mango

选择列表不在 group by 子句中 - SQL

当我们在编写 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 子句中或进行了聚合操作。