MySQL:从一组中找出特定的记录

MySQL: Find out a specific record from a group

在客户table中,有customer_ID,姓名,性别,年龄,representative_id。我想为某个代表找出最年轻的男女顾客。

我用过

SELECT *,MIN(Age) FROM customer GROUP BY Rep_ID, 性别;

但是它returns每个组的第一个记录。如何在特定条件下从组中选择特定行?在这种情况下,其组的 age = min(age)。我应该使用加入吗?任何人都可以给我提示。提前谢谢你。

C_ID    Name        Sex Age Rep_ID
1       Person1     F   26  H3
2       Person2     M   40  H8
3       Person3     M   37  H5
4       Person4     F   51  H5
5       Person5     M   45  H5
6       Person6     F   37  H8
7       Person7     M   27  H8
8       Person8     M   36  H3
9       Person9     F   35  H5
10      Person10    M   30  H8
11      Person11    F   22  H3
12      Person12    F   28  H8
13      Person13    F   19  H3
14      Person14    M   41  H3
15      Person15    M   33  H5
16      Person16    F   34  H3
17      Person17    M   29  H8
18      Person18    F   50  H8

要解决这样的问题,您首先需要找到每个代表的最小 male/female 年龄。您可以通过使用 MIN() 函数并按性别和代表 ID 分组来做到这一点,如下所示:

SELECT rep_id, sex, MIN(AGE) AS youngestAge
FROM myTable
GROUP BY rep_id, sex;

一旦知道每个组中最小的年龄,就可以将该子查询连接回原始 table 以获取其余信息:

SELECT m.*
FROM myTable m
JOIN(
   SELECT rep_id, sex, MIN(age) AS youngestAge
   FROM myTable
   GROUP BY rep_id, sex) tmp ON tmp.rep_id = m.rep_id AND tmp.sex = m.sex AND tmp.youngestAge = rep.age;

关于这方面的更多信息和类似的问题,您可以参考this页面。