具有

时间:2019-01-05 01:16:34

标签: mysql count subquery

我有一张桌子叫做赠品,每个赠品都可以有参赛者。我试图获得没有获胜者的赠品数量。竞赛者表中的字段称为获胜者,为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。

有什么更好的方法?谢谢

1 个答案:

答案 0 :(得分:1)

  

我正在尝试获得没有获胜者的赠品数量。

NOT EXISTS与相关子查询一起使用:

SELECT
    COUNT(*)
FROM
    giveaways g
WHERE NOT EXISTS (
    SELECT 1 FROM contestants WHERE giveaway_id = g.id AND winner = 1
)

子查询可确保每个赠品都没有获胜的竞争者。