可以说我有一张植物桌:
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)。
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 | +--------+----------+