我有以下架构:
为以下内容创建查询:查找初学者参与的每种活动的最年轻参与者的年龄。
错误的解决方案:
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。
答案 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