[英]Joining three columns from three tables and then grouping the distinct values in the first column by the maximum value in the third column
我將三張表合二為一,得到下表:
客戶名稱 | 國家的名字 | 客戶數 |
---|---|---|
客戶 1 | 阿爾巴尼亞 | 1 |
客戶 1 | 波斯尼亞 | 22 |
客戶 1 | 克羅地亞 | 2 |
客戶 1 | 德國 | 2 |
客戶 1 | 英國 | 1 |
客戶 1 | 馬其頓 | 4 |
客戶 1 | 黑山 | 3 |
客戶 1 | 塞爾維亞 | 4502 |
客戶 1 | 火雞 | 1 |
客戶 2 | 比利時 | 921 |
客戶 2 | 英國 | 3 |
客戶 2 | 馬耳他 | 3 |
客戶 2 | 羅馬尼亞 | 7 |
客戶 2 | 瑞典 | 1 |
客戶 3 | 拉脫維亞 | 1 |
客戶 3 | 立陶宛 | 1848年 |
客戶 4 | 意大利 | 143 |
客戶 5 | 阿爾巴尼亞 | 1 |
客戶 5 | 阿爾及利亞 | 4 |
客戶 5 | 亞美尼亞 | 4 |
客戶 5 | 奧地利 | 3 |
客戶 5 | 阿塞拜疆 | 1 |
客戶 5 | 比利時 | 5746 |
我加入這三個表的查詢如下所示:
SELECT c1.client_name, c2.country_name, count(c3.customer_id) AS num_customers
FROM
clients c1
LEFT JOIN countries c2 ON c1.fk_country = c2.country_id
LEFT JOIN customers c3 ON c1.fk_customer = c3.customer_id
GROUP BY c1.client_name, c2.country_name;
現在。 我需要擴展此查詢,以便我的表僅包含每個客戶的國家和最大客戶數:所以最終表應如下所示:
客戶名稱 | 國家的名字 | 客戶數 |
---|---|---|
客戶 1 | 塞爾維亞 | 4502 |
客戶 2 | 比利時 | 921 |
客戶 3 | 立陶宛 | 1848年 |
客戶 4 | 意大利 | 143 |
客戶 5 | 比利時 | 5746 |
我嘗試添加有子句或交叉連接 max(num_customers) 但只能返回一行。 請幫忙?!
您可以使用 window 函數:
SELECT client_name, country_name, num_customers
FROM (SELECT c1.client_name, c2.country_name, COUNT(*) AS num_customers,
ROW_NUMBER() OVER (PARTITION BY c1.client_name ORDER BY COUNT(*) DESC) as seqnum
FROM clients c1 JOIN
countries c2
ON c1.fk_country = c2.country_id JOIN
customers c3
ON c1.fk_customer = c3.customer_id
GROUP BY c1.client_name, c2.country_name
) ccc
WHERE seqnum = 1;
注意:我將連接切換為內部連接,假設所有客戶端都有一個國家/地區。 也許您在Bar Tawil有客戶。
這是一個顯示語法有效的 db<>fiddle。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.