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
这是问题:我有一个 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