2017-03-08 96 views
1

假设我有一个纸质路线数据库。如何计算一行有多少个不同的值?

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次这条路线,我只想知道他有多少条路线。

我想我需要使用集合论或外部连接,但即时无法解决这个问题。

+0

添加适当的数据样本和预期的结果.. – scaisEdge

回答

0

试试这个:

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) 
0

使用此:

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 
0

集合函数可以使用DISTINCT聚集唯一不同的值:

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

但是,如果你想包括递送员说还没有很多交易,你也必须查看deliverers表。这是可以做到既具有outer join

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

correlated subquery

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