问题是:我有一张桌子看起来像这样(简化)
+------+------+------+
| res | loc | rent |
+------+------+------+
| WEB | WP | 100 |
| WEB | VA | 300 |
| VR | WP | 500 |
| VR | VA | 200 |
| VR | VA | 600 |
| CS | WP | 400 |
| CS | WP | 90 |
+------+------+------+
我可以让表格看起来像这样,选择res,loc,SUM(租金)从testTable组由res,loc;
+------+------+-----------+
| res | loc | SUM(rent) |
+------+------+-----------+
| CS | WP | 490 |
| VR | VA | 800 |
| VR | WP | 500 |
| WEB | VA | 300 |
| WEB | WP | 100 |
+------+------+-----------+
从这里开始,我想要的是先订购带有VR的桌子(因为它的总租金是最大的),然后是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),而左室VA高于WP ( 800±500 )。
这有可能是我的梦想太大了吗?
发布于 2016-06-22 16:18:18
您需要在子查询中单独计算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
发布于 2016-06-22 15:23:20
您所需要的似乎是按降序计算ORDER BY
的rent
之和:
SELECT res, loc, SUM(rent)
FROM testTable
GROUP BY res, loc
ORDER BY SUM(rent) DESC
https://stackoverflow.com/questions/37972189
复制相似问题