MySQL中COUNT的默认值

时间:2009-09-28 15:01:00

标签: sql mysql null default-value

我的桌子看起来像这样:

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

我想计算prop1不为null的行,并使用以下select:

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中编写这样的内容?我想的是指定“country”的可能值列表和默认值(0),如果在表中找不到它。

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

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