mySQL按双组的和排序,保留组

mySQL按双组的和排序,保留组,mysql,group-by,sql-order-by,Mysql,Group By,Sql Order By,问题是:我有一个表,看起来像这样(简化) 我可以通过res,loc从testTable组中选择res,loc,SUM(rent),得到如下所示的表 +------+------+-----------+ | res | loc | SUM(rent) | +------+------+-----------+ | CS | WP | 490 | | VR | VA | 800 | | VR | WP | 500 | | WEB |

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

我可以通过res,loc从testTable组中选择res,loc,SUM(rent),得到如下所示的表

+------+------+-----------+
| 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),在VR组中,loc VA排在WP之前,因为800>500


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

似乎您所需要的只是按
顺序排列
租金的总和
按降序排列:

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

似乎您所需要的只是按
降序排列租金的总和:

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

您需要在子查询中分别计算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

太棒了,正是我想要的谢谢。然而,我的问题有一个扩展部分:我是否可以执行LIMIT 2这样的操作,并让它返回一个只有前两个res(VR和CS)的表?只需将LIMIT 2添加到子查询中,它就应该将其限制为前两个res(由于内部联接),但仍然显示它们的loc和;如果您只想要列表res中的最高LOC,请在整个查询的最后加上限制2。上面的评论应该说如果您只想要最高resAwesome中的最高LOC,这正是我想要的谢谢。然而,我的问题有一个扩展部分:我是否可以执行LIMIT 2这样的操作,并让它返回一个只有前两个res(VR和CS)的表?只需将LIMIT 2添加到子查询中,它就应该将其限制为前两个res(由于内部联接),但仍然显示它们的loc和;如果您只想要列表res中的最高LOC,请将限制2放在整个查询的最末尾。上面的注释应说明您是否只想要最高res中的最高LOC