首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sql practice查询问题

sql practice查询问题
EN

Stack Overflow用户
提问于 2011-11-14 08:15:34
回答 3查看 2K关注 0票数 1

尝试解决一些来自sql zoo的查询以练习sql技巧。

我有一个具有列(year, subject, winner)的表nobel,其中包含关于在给定的一年中为给定的主题获得高尚奖项的人的信息。

所以我假设主键是(year, subject, winner)的组合。

我试图解决的问题是:显示赢得多个主题的获胜者。

SQL查询的输出应该只有一列包含获胜者的姓名。

我觉得我应该使用group byhaving(count(winner)) >1。但我认为我需要按主题分组,这就是我的问题所在。

我不是在寻找查询。如果你能为我提供更多的逻辑而不是查询,这将会有所帮助。也不用担心它需要在哪个数据库上实现。我只是在练习这些问题。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-14 09:05:14

这应该会给你在任意年限内在多个不同的科目上获胜的人:

代码语言:javascript
复制
SELECT winner
FROM nobel
GROUP BY winner
HAVING COUNT(DISTINCT subject) > 1

对于特定的年份,只需添加WHERE year = <whatever> (或所有年份的GROUP BY year ),尽管历史上没有人在一年中因两个主题获得诺贝尔奖-但谁知道未来会发生什么;)

票数 3
EN

Stack Overflow用户

发布于 2011-11-14 08:22:04

您真的应该考虑在本地计算机上创建一个SQLiteMySQL数据库,以便您可以练习进行查询。

主键与您的问题无关,请不要担心。

您的思路是正确的-您将需要一个group byhaving子句。如果您按获胜者分组,那么您提出的查询应该可以工作。我已经添加了获胜的次数。

代码语言:javascript
复制
select
  winner, count(winner) as wins
from
  nobel
group by winner
having (count(winner)) > 1
票数 1
EN

Stack Overflow用户

发布于 2012-03-24 13:13:04

代码语言:javascript
复制
SELECT winner
FROM nobel 
GROUP BY winner 
HAVING COUNT(winner) > 1

这是最简单的方法......

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8115916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档