如果标题与实际问题不符,请注意。我不确定如何说这个。
在Postgres中,我有可以在车站的用户。这些电台的编号为1到5.我有一个表users
,它有一列station
。如果用户在工作站,station
值是工作站的编号,如果不是,则为NULL。以下是我在每个站点找到用户数量的方法:
SELECT station, count(users) AS users
FROM users
WHERE station IS NOT NULL
GROUP BY station ORDER BY station;
这会产生:
station | users
---------+---------
1 | 4
2 | 1
3 | 1
但那不是真的是真的。第4站和第5站有零用户。我该如何解决?我想使用此查询作为计算其他事物的视图,但我需要所有站点。据我所知,我不需要车站的桌子:我不会在其他任何地方使用它们。
那么如何解释未使用的电台?我真的需要为它们制作一个表并从用户表中引用站表,还是有更简单的方法?
答案 0 :(得分:4)
假设您有一个表stations
,您可以使用left join
处理此问题:
SELECT s.station, count(u.station) AS users
FROM stations s LEFT JOIN
users u
ON s.station = u.station
GROUP BY s.station
ORDER BY s.station;
如果没有这样的表,您可以使用generate_series()
:
SELECT s.station, count(u.station) AS users
FROM generate_series(1, 5) as s(station) LEFT JOIN
users u
ON s.station = u.station
GROUP BY s.station
ORDER BY s.station;