我们假设给定的MYSQL表结构
+----+-------+-------+
| id | group | count |
+----+-------+-------+
| 1 | cat | 11 |
| 2 | cat | 12 |
| 3 | dog | 4 |
| 4 | dog | 6 |
| 5 | cow | 16 |
| 6 | cow | 12 |
+----+-------+-------+我想做的是:每个动物组取一只动物,按计数字段升序排列。在上面的示例中,输出应该是:
| 1 | cat | 11 |
| 3 | dog | 4 |
| 6 | cow | 12 |但它比看起来复杂得多。获得这些结果的最优化的查询是什么?(当然,为每个组创建子查询不是一个选项)
发布于 2017-09-28 01:07:00
根据手册..。
SELECT x.*
FROM my_table x
JOIN
( SELECT `group`, MIN(count) count FROM my_table GROUP BY `group`) y
ON y.group = x.group
AND y.count = x.count;发布于 2017-09-28 01:02:45
在MySQL 8.0+中,您可以使用ROW_NUMBER()
SELECT *
FROM (SELECT *, ROW_NUMBER() OVER(PARTITION BY `group` ORDER BY `count`) AS rn
FROM table_name) sub
WHERE rn = 1;https://stackoverflow.com/questions/46453431
复制相似问题