考虑到这种关系,我们称之为
赢家
sid date tid
1 2011 1
2 2012 1
1 2011 2
2 2012 2
3 2013 1这是表属性
CREATE TABLE winners(
sid INTEGER REFERENCES student(sid),
date INTEGER NOT NULL,
tid INTEGER REFERENCES tournament(tid),
PRIMARY KEY(tid, date));我想这样查询,这样我就可以找到赢得每一场锦标赛的sids。
在本例中,我希望输出为
sid
1
2因为只有2个锦标赛(tid 1和2),sid 1和2都赢了。
我的尝试
此查询将返回
CREATE VIEW uniquetids AS
SELECT DISTINCT count(tid), sid FROM winners GROUP BY sid;
-----------
count sid
2 1
2 2
1 3这次又是什么?不确定如何仅获取%1%2
发布于 2020-10-30 13:35:28
它应该能服务于你的目的。
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)发布于 2020-10-30 13:29:19
这可能有点老生常谈,如果你能让一个学生赢得两次锦标赛,那就会失败。可能还会有其他情况...但考虑到你所拥有的:
SELECT sid
FROM (
SELECT sid, count(1) won
FROM winners
GROUP BY sid
) win_counts
WHERE won = (SELECT count(tid) FROM TOURNAMENT)https://stackoverflow.com/questions/64603009
复制相似问题