制作相关的细节'用于摘要查询

时间:2017-12-06 03:59:05

标签: sql ms-access

数据:

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

解决此问题
  • 以下是我使用Microsoft Access的解决方案。你知道的更好吗? 解?
  • 我不知道如何使用纯SQL执行此操作。你的解决方案是什么?

数据(在Access中)

enter image description here

查询1 (由查询2使用)

enter image description here

enter image description here

查询2 (使用查询1,并生成我正在寻找的 ID

enter image description here

enter image description here

3 个答案:

答案 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