聚合函数在ORDER BY子句中可以做什么?
可以说我有一张植物桌:
id fruit1 banana
2 apple
3 orange
我可以做这些
SELECT * FROM plant ORDER BY id;SELECT * FROM plant ORDER BY fruit DESC;
这是显而易见的事情。
但是我被这个咬了,这是怎么做的?
SELECT * FROM plant ORDER BY SUM(id);SELECT * FROM plant ORDER BY COUNT(fruit);
SELECT * FROM plant ORDER BY COUNT(*);
SELECT * FROM plant ORDER BY SUM(1) DESC;
所有这些仅返回第一行(id = 1)。
- 底层发生了什么?
- 聚合函数将在哪些情况下派上用场
ORDER BY
?
回答:
如果您实际选择汇总值而不是表中的列,则结果将更加清晰:
SELECT SUM(id) FROM plant ORDER BY SUM(id)
这将返回所有ID的总和。这当然是一个无用的示例,因为聚合将始终仅创建一行,因此无需排序。在查询中获得第qith列的原因是因为MySQL选择了一行,不是随机而是确定性的。碰巧的是它是您所用表的第一列,但是其他人可能会根据存储引擎,主键等获得另一行。因此,仅在ORDER
BY子句中进行聚合不是很有用。
通常,您要做的是按某个字段进行分组,然后以某种方式对结果集进行排序:
SELECT fruit, COUNT(*)FROM plant
GROUP BY fruit
ORDER BY COUNT(*)
现在,这是一个更有趣的查询!这将使您为每个水果排一列,并为该水果的总数计数。尝试添加更多苹果,订购实际上开始有意义:
完整表格:
+----+--------+| id | fruit |
+----+--------+
| 1 | banana |
| 2 | apple |
| 3 | orange |
| 4 | apple |
| 5 | apple |
| 6 | banana |
+----+--------+
上面的查询:
+--------+----------+| fruit | COUNT(*) |
+--------+----------+
| orange | 1 |
| banana | 2 |
| apple | 3 |
+--------+----------+
以上是 聚合函数在ORDER BY子句中可以做什么? 的全部内容, 来源链接: utcz.com/qa/403101.html