我有一张桌子叫做赠品,每个赠品都可以有参赛者。我试图获得没有获胜者的赠品数量。竞赛者表中的字段称为获胜者,为1或0。
我的数据如下:
赠品表
| id | name |
|----|------------|
| 1 | Giveaway 1 |
| 2 | Giveaway 2 |
参赛者表
| id | giveaway_id|winner|
|----|------------|------|
| 1 | 1 | 0 |
| 2 | 1 | 0 |
| 3 | 2 | 0 |
这是我的查询:
SELECT (SELECT COUNT(id) FROM contestants c
WHERE c.giveaway_id = g.id AND winner = 1) as winners
FROM giveaways g
having winners = 0
现在这将返回多行,我想获取行数。我试着将一个count()包裹在赢家的子查询周围,但这没有用。
在上面的示例中,将返回:
Results
| winners |
|---------|
| 0 |
| 0 |
我只希望行数为2。
有什么更好的方法?谢谢
答案 0 :(得分:1)
我正在尝试获得没有获胜者的赠品数量。
将NOT EXISTS
与相关子查询一起使用:
SELECT
COUNT(*)
FROM
giveaways g
WHERE NOT EXISTS (
SELECT 1 FROM contestants WHERE giveaway_id = g.id AND winner = 1
)
子查询可确保每个赠品都没有获胜的竞争者。