GROUP BY 子查询 returns 多行
GROUP BY Subquery returns more than one row
我正在寻找解决以下情况的方法。我有一个 table,我需要 return 每个“p.pays
”只有一个数字,这个查询应该列出“nom
from table Pays
" 其中至少有一半的 "athlete
" 在 table "Resultat
" 但我的子查询 returns 不止一行有办法我可以在查询和子查询中匹配“p.code
”,因此每个“p.code
”只有 returns 1 行。
SELECT p.nom , count(*) FROM Athlete a
INNER JOIN Pays p ON a.pays = p.code
GROUP BY p.code HAVING count(*)/2 >= (SELECT count(*) FROM Athlete a
INNER JOIN Pays p ON a.pays = p.code
INNER JOIN Resultat r ON a.code = r.athlete
GROUP BY p.code);
预期结果,显示国家“支付”,其中至少一半的运动员“运动员”获得了奖牌(运动员在 Resultat
table 中)。 :
p.nom | count(*)
|----------|--------|
|Albania | 134 | <-- Total Number of athletes "Athlete" in the
|Argentina | 203 | country "Pays".
| ... | ... |
您想在该国拥有两项运动员:
- 所有运动员
- 运动员的成绩
为此使用条件计数:
SELECT p.nom, count(*)
FROM pays p
INNER JOIN athlete a ON a.pays = p.code
GROUP BY p.code
HAVING COUNT(*) / 2 >=
COUNT(*) FILTER (WHERE a.code IN (SELECT athlete FROM resultat))
ORDER BY p.nom;
我正在寻找解决以下情况的方法。我有一个 table,我需要 return 每个“p.pays
”只有一个数字,这个查询应该列出“nom
from table Pays
" 其中至少有一半的 "athlete
" 在 table "Resultat
" 但我的子查询 returns 不止一行有办法我可以在查询和子查询中匹配“p.code
”,因此每个“p.code
”只有 returns 1 行。
SELECT p.nom , count(*) FROM Athlete a
INNER JOIN Pays p ON a.pays = p.code
GROUP BY p.code HAVING count(*)/2 >= (SELECT count(*) FROM Athlete a
INNER JOIN Pays p ON a.pays = p.code
INNER JOIN Resultat r ON a.code = r.athlete
GROUP BY p.code);
预期结果,显示国家“支付”,其中至少一半的运动员“运动员”获得了奖牌(运动员在 Resultat
table 中)。 :
p.nom | count(*)
|----------|--------|
|Albania | 134 | <-- Total Number of athletes "Athlete" in the
|Argentina | 203 | country "Pays".
| ... | ... |
您想在该国拥有两项运动员:
- 所有运动员
- 运动员的成绩
为此使用条件计数:
SELECT p.nom, count(*)
FROM pays p
INNER JOIN athlete a ON a.pays = p.code
GROUP BY p.code
HAVING COUNT(*) / 2 >=
COUNT(*) FILTER (WHERE a.code IN (SELECT athlete FROM resultat))
ORDER BY p.nom;