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;