数据:
ID CITY SEX AGE
1 NYC M 23
2 NYC M 28
3 NYC F 22
4 NYC F 19
5 LA M 29
6 LA M 25
7 LA F 18
8 LA F 21
查询:我想为每个城市的每个性别生成最年轻人的 ID 。上述数据中有2个性别和2个城市(尽管实际数据中可能有更多城市)。
我想使用 Microsoft Access 以及纯SQL
解决此问题数据(在Access中)
查询1 (由查询2使用)
查询2 (使用查询1,并生成我正在寻找的 ID )
答案 0 :(得分:1)
尝试使用:在与GROUP BY
的联接中使用子查询,但如果有多个最年轻的同一AGE
SELECT t.*
FROM table_name t
INNER JOIN (SELECT MIN(age) age, city, sex
FROM table_name GROUP BY city, sex) t1 ON t1.age = t.AGE
AND t1.city = t.city
AND t1.sex = t.sex
答案 1 :(得分:1)
您需要对所有三个特征进行连接:
SELECT table.*
FROM table INNER JOIN (SELECT city, sex, MIN(age) AS min_age
FROM Table
GROUP BY city, sex) tA ON table.city = tA.city
AND table.sex = tA.sex
AND table.age = tA.min_age
这里的优点是子查询不相关,因此只进行一次评估。对父查询中的每条记录计算相关子查询,对于大型表和/或复杂连接条件,可能是性能密集型。
答案 2 :(得分:1)
使用correlated query
:
SELECT *
FROM table1 t1
WHERE t1.age =
( SELECT min(t2.age)
FROM table1 t2
WHERE t1.city = t2.city
AND t1.sex = t2.sex )
<强>结果:强>
+----+------+-----+-----+
| id | city | sex | age |
+----+------+-----+-----+
| 1 | NYC | M | 23 |
| 4 | NYC | F | 19 |
| 6 | LA | M | 25 |
| 7 | LA | F | 18 |
+----+------+-----+-----+
<强> DEMO 强>