MySQL:从组中找出特定记录

时间:2015-05-21 19:01:23

标签: mysql join group-by

在customer表中,它有customer_ID,name,sex,age,representative_id。我想找一位代表最年轻的男女客户。

我用过

SELECT *,MIN(年龄)来自客户GROUP BY Rep_ID,性别;

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

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

1 个答案:

答案 0 :(得分:4)

要解决这样的问题,首先需要为每位代表找到最年轻的男/女年龄。您可以使用MIN()功能并按性别分组和重复ID,如下所示:

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

了解每个组中最年轻的年龄后,您可以将该子查询加入原始表中以获取其余信息:

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页。