首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >给定3列(sid,date,tid)和主键(date,tid)。查找具有每个tid的tid

给定3列(sid,date,tid)和主键(date,tid)。查找具有每个tid的tid
EN

Stack Overflow用户
提问于 2020-10-30 13:07:33
回答 2查看 38关注 0票数 1

考虑到这种关系,我们称之为

赢家

代码语言:javascript
复制
sid date tid
1   2011 1
2   2012 1
1   2011 2
2   2012 2
3   2013 1

这是表属性

代码语言:javascript
复制
CREATE TABLE winners(
    sid     INTEGER     REFERENCES student(sid),
    date    INTEGER     NOT NULL, 
    tid     INTEGER     REFERENCES tournament(tid),
    PRIMARY KEY(tid, date));

我想这样查询,这样我就可以找到赢得每一场锦标赛的sids。

在本例中,我希望输出为

代码语言:javascript
复制
sid
1
2

因为只有2个锦标赛(tid 1和2),sid 1和2都赢了。

我的尝试

此查询将返回

代码语言:javascript
复制
CREATE VIEW uniquetids AS
SELECT DISTINCT count(tid), sid FROM winners GROUP BY sid;
-----------

count  sid
2      1
2      2
1      3

这次又是什么?不确定如何仅获取%1%2

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-30 13:35:28

它应该能服务于你的目的。

代码语言:javascript
复制
WITH cdata AS (
    SELECT 
        sid, 
        count(DISTINCT tid) tid_count 
    FROM winners 
    GROUP BY sid
)
SELECT 
    sid 
FROM cdata 
WHERE 
    tid_count = (SELECT max(tid_count) FROM cdata)
票数 0
EN

Stack Overflow用户

发布于 2020-10-30 13:29:19

这可能有点老生常谈,如果你能让一个学生赢得两次锦标赛,那就会失败。可能还会有其他情况...但考虑到你所拥有的:

代码语言:javascript
复制
SELECT sid 
FROM (
    SELECT sid, count(1) won 
    FROM winners 
    GROUP BY sid
) win_counts
WHERE won = (SELECT count(tid) FROM TOURNAMENT)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64603009

复制
相关文章

相似问题

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