MySQL在两个子集上排序

时间:2018-11-13 19:49:16

标签: mysql

我一直在试图找到一种方法来对表的几个不同子集进行本质上的排序。想象一下这两个表:

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

我已经尝试了几种方法,但无法使其正常工作。我将不胜感激。

1 个答案:

答案 0 :(得分:1)

SQL DEMO

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

enter image description here