SQL的基本语法

时间:2017-02-10 05:55:14

标签: sql

我有以下架构:

enter image description here

为以下内容创建查询:查找初学者参与的每种活动的最年轻参与者的年龄。

错误的解决方案:

SELECT  c.type, MIN(c.age)
FROM    Customers   c
WHERE   c.level = 'Beginner'
GROUP   BY  c.type;

正确的解决方案:

SELECT  c.type, MIN(c.age)
FROM    Customers   c
WHERE   EXISTS  (   SELECT  *
                FROM    Customers   c2
                WHERE   c2.level = 'Beginner'
                AND c2.type=c.type )
GROUP   BY  c.type;

但是,我认为第一个查询确实可以完成所需的任务,因为它保证每个类型中至少有一个初学者,因为c.level = beginner。

2 个答案:

答案 0 :(得分:1)

问题是你的第一个查询返回了最年轻的初学者的年龄。该问题要求所有类别中至少有一名初学者的最年轻参与者。

因此,在第二个查询中,当您执行以下检查时:

WHERE EXISTS ( SELECT *
               FROM Customers c2
               WHERE c2.level = 'Beginner'
               AND c2.type=c.type )

你实际做的是确认该类别至少有一个初学者参与者,然后在该类别的所有参与者中获得最低年龄。

答案 1 :(得分:0)

你也可以试试这个:

SELECT      activities.cid,
            activities.slope_id,
            activities.day

FROM        Activities activities
WHERE       activities.cid IN (SELECT   customers.cid
                               FROM     Customers   customers
                               WHERE    customers.level = 'Beginner')
GROUP BY    activities.slope_id,
            activities.cid,
            activities.day

你可以在这里查看 - > http://rextester.com/NUZCD25675