sql查询以一种高性能的方式

时间:2018-07-08 12:34:59

标签: sql

在我的情况下,有一个名为ServiceCarrier的表,如下所示:

ServiceId CarrierId

1         1  
2         1  
4         1  
1         2  
2         2  
5         2   
1         20028  
2         20028  
5         20028  

我想按CarrierId对其进行分组,并希望在分组的分组之间取得交集。 我的预期结果如下

ServiceId 
1  
2  

2 个答案:

答案 0 :(得分:0)

假设(serviceidcarrierid)是唯一的。 GROUP BY serviceid并获得count(*)。这将告诉您有多少家运营商提供该服务。由于只希望所有运营商提供的服务,因此请在HAVING子句中限制结果,以仅保留其服务数量等于所有运营商的数量的服务。这表明所有运营商都提供了该服务。

SELECT serviceid
       FROM elbat
       GROUP BY serviceid
       HAVING count(*) = (SELECT count(DISTINCT carrierid)
                                 FROM elbat);

SQL Fiddle

答案 1 :(得分:0)

要获得您所写的“期望”和“交集”,也许可以尝试一下?

  

从TSO中选择serviceID,其中serviceID = carrierID

例如,如果您想要汇总,计数或总和,也许可以尝试一下?

  

选择serviceID,count(carrierID)作为来自TSO的计数,其中   serviceID =运营商ID按serviceID分组