MySQL如何在每个分组中选择第一行?
在MySQL中,当我们需要在每个分组中从一组数据中选择第一行时,可以使用以下方法:
SELECT *
FROM table_name
WHERE (column_name_1, column_name_2) IN
(SELECT column_name_1, MIN(column_name_2)
FROM table_name
GROUP BY column_name_1);
在这个查询语句中,我们首先使用子查询来识别每个分组的第一行。 然后将这些行与原始表中的数据进行比较,从而得到我们要选择的数据。
例如,我们有以下表:
| id | category | value |
|---|---|---|
| 1 | A | 10 |
| 2 | A | 20 |
| 3 | B | 30 |
| 4 | B | 40 |
| 5 | B | 50 |
现在,我们需要从每个类别中选择第一行。 我们可以使用上述查询语句来完成此操作:
SELECT *
FROM table_name
WHERE (category, value) IN
(SELECT category, MIN(value)
FROM table_name
GROUP BY category);
此查询将返回以下结果:
| id | category | value |
|---|---|---|
| 1 | A | 10 |
| 3 | B | 30 |
这是我们想要的结果:每个类别中的第一行。
阅读更多:MySQL 教程
总结
在MySQL中,我们可以使用子查询和WHERE语句来选择每个分组(即每个类别)中的第一行。 通过对子查询的使用,我们可以从原始表中获取所需数据,从而更好地满足我们的需求。
极客教程