簡體   English   中英

我如何計算一行擁有多少個不同的值?

[英]How do I count how many distinct values a row possess?

假設我有一個紙質路線數據庫。

Create table routes(route_number varchar(100), route_length varchar(1000)
Create table deliverers(deliv_name varchar(100))
Create table deliveries(Deliv_name varchar(100), route_number varchar(100), 
                        number_of_papers varchar(100), date_of delivery date(yyyy-mm-dd))

(我知道這不完整,但我們不需要知道這個例子的關鍵)

我想知道每個送貨員的路線數量,而不是每條路線上的送貨量。 如果送貨員A有3條路線並且他每年通過這條路線100次,我只想知道他有多少條路線。

我想我需要使用集合論或外部聯接,但到目前為止我無法解決這個問題。

嘗試這個:

SELECT deliverers.deliv_name As DeliveryPerson, COUNT(DISTINCT route_number) As RoutesCount
FROM deliverers 
INNER JOIN deliveries ON deliveries.Deliv_name =  deliverers.deliv_name
GROUP BY (deliverers.deliv_name)

用這個:

SELECT      A.deliv_name, COUNT(DISTINCT route_number) AS "NoOfRoutes"
FROM        dbo.deliverers A 
            LEFT OUTER JOIN dbo.deliveries B 
                ON A.deliv_name = B.Deliv_name
GROUP BY    A.deliv_name

聚合函數可以使用DISTINCT僅聚合不同的值:

SELECT deliv_name,
       count(DISTINCT route_number) AS routes
FROM deliveries
GROUP BY deliv_name;

但是如果你想包括那些還沒有多少任何交付的交付者,你也必須查看deliverers表。 這可以通過外連接完成

SELECT deliv_name,
       count(DISTINCT route_number)
FROM      deliverers
LEFT JOIN deliveries USING (deliv_name)
GROUP BY deliv_name;

相關子查詢

SELECT deliv_name,
       (SELECT count(DISTINCT route_number)
        FROM deliveries
        WHERE deliv_name = deliverers.deliv_name
       ) AS routes
FROM deliverers;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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