按嵌套表计数排序

问题描述

我有两个表Major(majorId,label)Minor(minorId,majorId)

我要按未成年人(和标签)的计数归还少校。

类似的东西:

SELECT majorId,label
FROM Major ma
ORDER BY
  (SELECT COUNT(*)
   FROM Minor mi
   WHERE mi.majorId=ma.majorId),label;

我想象它的工作方式是:将Minor表按majorId分组,然后为每个majorId计数行,然后按该核心响应计数然后按标签对Major表进行排序。

解决方法

如何?

SELECT majorId,label
FROM Major ma
ORDER BY (SELECT COUNT(*) FROM Minor mi WHERE mi.majorId=ma.majorId 
group by mi.majorId),label ;
,

除了分组之外,您还可以使用横向联接:

SELECT majorId,label,tMinor.cnt 
FROM Major AS ma 
LATERAL
(
     SELECT COUNT(*) AS cnt 
     FROM Minor AS mi 
     WHERE mi.majorId = ma.majorId
) AS tMinor 

ORDER BY cnt,label

或传统上与组:

SELECT 
     majorId,COUNT(DISTINCT mi.minorId) AS cnt 
FROM Major AS ma 

LEFT JOIN Minor AS mi 
     ON mi.majorId = ma.majorId

GROUP BY majorId,label

ORDER BY cnt,label