gpt4 book ai didi

sql - Postgres - SQL 查询按 2 列计数

转载 作者:行者123 更新时间:2023-11-29 14:35:51 26 4
gpt4 key购买 nike

我在 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

我试图创建一个表格,显示同一 zone_name 内的同一 trade_name 中有多少客户 (client_name)。

我一直在尝试使用 GROUP BY 但无法弄明白。

有什么想法吗?

最佳答案

您可以在两列上使用 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
;

顺便说一句,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_nametrade_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
;

关于sql - Postgres - SQL 查询按 2 列计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44863562/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com