Mysql 按嵌套表计数排序

Mysql 按嵌套表计数排序,mysql,sql,nested-query,Mysql,Sql,Nested Query,我有两个表Major(majorId,label)和minorId(minorId,majorId) 我要返回按小调(和标签)计数排序的大调 比如: SELECT majorId, label FROM Major ma ORDER BY (SELECT COUNT(*) FROM Minor mi WHERE mi.majorId=ma.majorId), label; 我想象它工作的方式是:副表按majorId分组,然后为每个majorId计算行数,然后主表按

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

我要返回按小调(和标签)计数排序的大调

比如:

SELECT majorId,
       label
FROM Major ma
ORDER BY
  (SELECT COUNT(*)
   FROM Minor mi
   WHERE mi.majorId=ma.majorId), label;
我想象它工作的方式是:副表按majorId分组,然后为每个majorId计算行数,然后主表按相应的计数排序,然后按标签排序。

这样如何:

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
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, label
    ,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

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

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, label
    ,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

你的问题是什么?你的代码看起来不错。你的问题是什么?你的代码看起来不错。