【问题标题】:Mysql count of a subquery column with having具有的子查询列的Mysql计数
【发布时间】:2019-01-05 01:16:33
【问题描述】:

我有一张叫做赠品的桌子,每个赠品都可以有参赛者。我正在尝试获得没有获奖者的赠品数量。参赛者表有一个名为“获胜者”的字段,该字段为 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 的行数。

有什么更好的方法?谢谢

【问题讨论】:

    标签: mysql count subquery


    【解决方案1】:

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

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

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

    子查询确保每个赠品都没有获胜的参赛者。

    【讨论】:

    • 像冠军一样工作,我还发现我可以用另一个子查询 SELECT count(*) as needs_winners FROM(SELECT (SELECT COUNT(id) FROM contestants c WHERE c.giveaway_id = g.id AND winner = 1) as winners FROM giveaways g having winners = 0) as x 包装我的查询,但你有一个更好的方法!谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    • 1970-01-01
    • 2021-09-03
    • 2015-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多