我一直在尝试找出一种方法来对表的几个不同子集进行实质排序。想象一下这两个表:
City
id name
1 ACity
2 BCity
3 CCity
Project
id name type city
1 AP 0 ACity
2 BP 1 ACity
3 CP 1 BCity
4 DP 1 CCity
5 EP 1 ACity
6 FP 0 CCity
我要显示的是所有至少有1个类型为0的项目的城市。列出该城市中的所有项目,顶部为0类型的项目(然后按字母顺序排序)。随后,所有没有项目类型0的城市都将按字母顺序显示。因此,对于此示例,结果将是:
Desired result:
ACity AP
BP
EP
CCity FP
DP
BCity CP
我已经尝试了几种方法,但无法使其正常工作。我将不胜感激。
最佳答案
SELECT *
FROM Projects P
LEFT JOIN (SELECT city, COUNT(city) as top_city
FROM Projects
WHERE type = 0
GROUP BY city) R
ON P.city = R.city
ORDER BY R.top_city DESC,
P.city,
P.type,
P.name
输出:我包括所有要调试的列,但是您可以将结果限制为P.City和P.Name