聚合函数在ORDER BY子句中可以做什么?

可以说我有一张植物桌:

id fruit

1 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)。

  1. 底层发生了什么?
  2. 聚合函数将在哪些情况下派上用场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

回到顶部