我在Postgres有一张桌子:
zone_name | trade_name | client_name
G - WLA | Garage Doors | King Garage Doors
J - SOC | Attic | Attic Jimmy
E - SGV2 | Attic | Attic Jimmy
J - SOC | Closets | Brad Factory
E - SGV2 | Closets | Brad Factory
AE - SFE | Paint | Chris Painting
E - SGV2 | Kitchen | Joe Remodeling
我尝试创建一个表格,显示同一client_name
内同一trade_name
个客户(zone_name
)的数量。
我一直试图使用GROUP BY
,但无法弄明白。
有什么想法吗?
答案 0 :(得分:1)
您可以在两列上使用GROUP BY
。在以下查询中,我使用group by 1, 2
- 这是从SELECT
子句的前两列进行分组的便捷方式。
另外,我在查询中添加了两个不同的count()
- 您可能会发现,在您的情况下,使用count(distinct ..)
在语义上更正确。
select
zone_name,
trade_name,
count(client_name) as count_clients,
count(distinct client_name) as count_distinct_clients
from table
group by 1, 2
order by 1, 2
;
BTW,count(client_name)
将不计算行,其中client_name
为NULL。
您可能还会发现一个有用的新功能(9.5+),GROUPING SETS
(请参阅https://www.postgresql.org/docs/current/static/queries-table-expressions.html),它不仅可以为(zone_name, trade_name)
对组提供计数,还可以对于zone_name
和trade_name
的“单列”组,在单个查询中(此处我也使用数字顺序别名):
select
zone_name,
trade_name,
count(client_name) as count_clients,
count(distinct client_name) as count_distinct_clients
from table
group by grouping sets ((1, 2), 1, 2)
order by 1, 2
;