2

我有一张看起来像这样的桌子:

+-------+-----+
|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)。

4

2 回答 2

4

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

MySQL里面没有国家列表,所以应该从某个地方获取国家代码。

如果您拥有所有国家/地区mytableprop可能设置为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
于 2009-09-28T15:02:17.007 回答
1

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

于 2009-09-28T15:04:00.780 回答