[英]How do I get distinct values from the table along with the count of how many rows there are containing that value
[英]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.