我在雪花中有一个这样的表。它支持ANSI SQL,所以如果你不熟悉这个数据库也不用担心。
销售员 | 客户 | 国家 | 布朗 | 超级公司英国 | 布朗 |
---|---|---|
另一个客户 | 英国 | |
Contoso | 我们 | |
测试公司 | 我们 |
QUALIFY
可用于过滤每个salesman
的最高值:
SELECT salesman,
country,
count(country) AS cnt
FROM customertable
GROUP BY salesman, country
QUALIFY RANK() OVER(PARTITION BY salesman ORDER BY cnt DESC) = 1
关于你的问题,我猜你想要按国家而不是国家来计算客户。这应该使用窗口函数来完成工作。和资格Window Functions文档
CREATE OR REPLACE TABLE customers (salesman STRING, customer STRING, country STRING);
INSERT INTO customers
VALUES
('Brown', 'Super Company', 'UK'),
('Brown', ' Another customer', 'UK'),
('Smith', 'Contoso', 'US'),
('Brown', 'Test company', 'US')
;
SELECT
salesman,
country,
COUNT(customer) AS nb_customer
FROM customers
GROUP BY
salesman,
country
QUALIFY RANK() OVER (PARTITION BY salesman ORDER BY nb_customer DESC) = 1
;