在PostgreSQL中,如果没有,则获取最小值

时间:2015-06-03 01:00:50

标签: sql postgresql

如果标题与实际问题不符,请注意。我不确定如何说这个。

在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站有零用户。我该如何解决?我想使用此查询作为计算其他事物的视图,但我需要所有站点。据我所知,我不需要车站的桌子:我不会在其他任何地方使用它们。

那么如何解释未使用的电台?我真的需要为它们制作一个表并从用户表中引用站表,还是有更简单的方法?

1 个答案:

答案 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;