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

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


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

最佳答案

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

mysql - MySQL在两个子集上排序-LMLPHP

10-08 12:55