尝试解决一些来自sql zoo的查询以练习sql技巧。
我有一个具有列(year, subject, winner)的表nobel,其中包含关于在给定的一年中为给定的主题获得高尚奖项的人的信息。
所以我假设主键是(year, subject, winner)的组合。
我试图解决的问题是:显示赢得多个主题的获胜者。
SQL查询的输出应该只有一列包含获胜者的姓名。
我觉得我应该使用group by和having(count(winner)) >1。但我认为我需要按主题分组,这就是我的问题所在。
我不是在寻找查询。如果你能为我提供更多的逻辑而不是查询,这将会有所帮助。也不用担心它需要在哪个数据库上实现。我只是在练习这些问题。
发布于 2011-11-14 09:05:14
这应该会给你在任意年限内在多个不同的科目上获胜的人:
SELECT winner
FROM nobel
GROUP BY winner
HAVING COUNT(DISTINCT subject) > 1对于特定的年份,只需添加WHERE year = <whatever> (或所有年份的GROUP BY year ),尽管历史上没有人在一年中因两个主题获得诺贝尔奖-但谁知道未来会发生什么;)
发布于 2011-11-14 08:22:04
您真的应该考虑在本地计算机上创建一个SQLite或MySQL数据库,以便您可以练习进行查询。
主键与您的问题无关,请不要担心。
您的思路是正确的-您将需要一个group by和having子句。如果您按获胜者分组,那么您提出的查询应该可以工作。我已经添加了获胜的次数。
select
winner, count(winner) as wins
from
nobel
group by winner
having (count(winner)) > 1发布于 2012-03-24 13:13:04
SELECT winner
FROM nobel
GROUP BY winner
HAVING COUNT(winner) > 1这是最简单的方法......
https://stackoverflow.com/questions/8115916
复制相似问题