簡體   English   中英

連接三個表中的三列,然后將第一列中的不同值按第三列中的最大值分組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM