【问题标题】:Default values for COUNT in MySQLMySQL 中 COUNT 的默认值
【发布时间】:2010-12-02 00:47:27
【问题描述】:

我有一张看起来像这样的表格:

+-------+-----+
|country|prop1|
+-------+-----+
|RO     |  1  |
|RO     |  2  |
|UK     |  1  |
|IT     |  2  |
+-------+-----+

我想计算 prop1 不为空的行,我使用以下选择:

SELECT `country`, COUNT(*) as number FROM table GROUP BY `country`;

这将返回:

+-------+------+
|country|number|
+-------+------+
|RO     |  2   |
|UK     |  1   |
|IT     |  1   |
+-------+------+

但是我需要以下内容:

+-------+------+
|country|number|
+-------+------+
|RO     |  2   |
|UK     |  1   |
|IT     |  1   |
|FR     |  0   |
+-------+------+

你认为这样的东西可以直接用 SQL 编写吗?我在想一些事情,比如指定“国家”的可能值列表,如果在表中找不到默认值 (0)。

【问题讨论】:

    标签: sql mysql null default-value


    【解决方案1】:

    在您的示例中,FR 的来源并不明显。

    MySQL 里面没有国家/地区列表,因此应该从某个地方获取国家/地区代码。

    如果mytable 中包含所有国家/地区(prop 可能设置为NULL):

    SELECT  country, COUNT(prop) as number
    FROM    mytable
    GROUP BY
            country
    

    如果您在单独的表中包含国家/地区(mytable 中可能缺少国家/地区):

    SELECT  c.id, COUNT(m.prop) as number
    FROM    countries c
    LEFT JOIN
            mytable m
    ON      m.country = c.id
    GROUP BY
            c.id
    

    【讨论】:

      【解决方案2】:

      我认为您必须与所有国家/地区建立一个表格。最好更改您当前的表以使用国家/地区的键。这样您就可以进行 LEFT JOIN。这将为您提供所有国家/地区,如果该国家/地区没有道具,则为 NULL 值。

      【讨论】:

        猜你喜欢
        • 2012-01-03
        • 1970-01-01
        • 2019-07-05
        • 1970-01-01
        • 1970-01-01
        • 2012-06-22
        • 2015-05-05
        • 2014-07-03
        • 2016-12-10
        相关资源
        最近更新 更多