我的桌子看起来像这样:
+-------+-----+
|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),如果在表中找不到它。
答案 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值。