mySQL ORDER BY SUM of double GROUP BY,保留组

mySQL ORDER BY SUM of double GROUP BY, preserve groups

这是问题:我有一个 table 看起来像这样(简化)

+------+------+------+
| res  | loc  | rent |
+------+------+------+
| WEB  | WP   |  100 |
| WEB  | VA   |  300 |
| VR   | WP   |  500 |
| VR   | VA   |  200 |
| VR   | VA   |  600 | 
| CS   | WP   |  400 | 
| CS   | WP   |   90 |
+------+------+------+

我可以使用 SELECT res, loc, SUM(rent) FROM testTable GROUP BY res, loc;

使 table 看起来像这样
+------+------+-----------+
| res  | loc  | SUM(rent) |
+------+------+-----------+
| CS   | WP   |       490 |
| VR   | VA   |       800 |
| VR   | WP   |       500 |
| WEB  | VA   |       300 |
| WEB  | WP   |       100 |
+------+------+-----------+

我想要的是先用 VR 订购 table (因为它的 TOTAL 租金最大),然后是 CS ,然后是 WEB 但我也想保留组顺序所以它看起来像这样

+------+------+-----------+
| res  | loc  | SUM(rent) |
+------+------+-----------+
| VR   | VA   |       800 |
| VR   | WP   |       500 |
| CS   | WP   |       490 |
| WEB  | VA   |       300 |
| WEB  | WP   |       100 |
+------+------+-----------+

这样他们就可以按位置对租金求和,然后按最大租金总额排序,然后按该租金总额中的租金排序。 VR 是 (800 + 500) > 490 > (300 + 100) 的首要原因,并且 loc VA 在 VR 组中排在 WP 之前,因为 800 > 500.

这可能是我梦想太大了吗?

看来你只需要 ORDER BY rent 的总和按降序排列:

SELECT res, loc, SUM(rent) 
FROM testTable 
GROUP BY res, loc
ORDER BY SUM(rent) DESC

您需要在子查询中单独计算 res 值的总数,如下所示:

SELECT t.res, t.loc, SUM(t.rent) AS reslocRent
FROM table AS t
INNER JOIN (
   SELECT res, SUM(rent) AS resRent
   FROM table
   GROUP BY res
) AS subQ ON t.res = subQ.res
GROUP BY t.res, t.loc
ORDER BY subQ.resRent DESC, reslocRent DESC