Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL:从组中查找特定记录_Mysql_Join_Group By - Fatal编程技术网

MySQL:从组中查找特定记录

MySQL:从组中查找特定记录,mysql,join,group-by,Mysql,Join,Group By,在客户表中,它有客户ID、姓名、性别、年龄、代表ID。我想找出某个代表最年轻的男性和女性客户 我用过 按代表ID、性别从客户群中选择*、最小(年龄) 但它返回每组的第一条记录。在特定条件下,如何从组中选择特定行?在这种情况下,其组的年龄=分钟(年龄)。我应该使用join吗?任何人都可以给我一个提示。先谢谢你 C_ID Name Sex Age Rep_ID 1 Person1 F 26 H3 2 Person2 M 40 H

在客户表中,它有客户ID、姓名、性别、年龄、代表ID。我想找出某个代表最年轻的男性和女性客户

我用过

按代表ID、性别从客户群中选择*、最小(年龄)

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

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

要解决这样的问题,首先需要为每个代表找到最年轻的男性/女性年龄。您可以使用
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;

有关此问题和类似问题的更多信息,请参阅第页。

要解决此类问题,您首先需要为每位代表找到最年轻的男性/女性年龄。您可以使用
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;

有关此问题和类似问题的更多信息,请参阅第页。

欢迎使用StackOverflow!请花点时间查看一些MySQL问题,看看如何更好地格式化示例数据和查询,因为这将使我们更容易阅读。欢迎使用StackOverflow!请花点时间查看一些MySQL问题,看看您如何更好地格式化示例数据和查询,因为这样对我们来说更容易阅读。您应该只选择m.*,否则您也会得到所有
tmp
字段。您因为我显示了所有列而拒绝投票?相当高的标准;谢谢你。你的回答很有帮助,我很高兴能帮上忙。如果此答案仍然是您使用的解决方案,您可以通过单击答案旁边的复选标记来接受它,以向未来的读者显示问题的解决方法。您应该只选择m.*,否则您也会得到所有
tmp
字段。您因为我显示了所有列而拒绝投票?相当高的标准;谢谢你。你的回答很有帮助,我很高兴能帮上忙。如果此答案仍然是您使用的解决方案,您可以通过单击答案旁边的复选标记来接受它,以向未来的读者显示是什么解决了您的问题。