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
你的问题是什么?你的代码看起来不错。你的问题是什么?你的代码看起来不错。