2012-12-08 69 views
-2

一个非常奇怪的SQL查询

这些列如下:

市名,奖金

Paris, Bob, 4  
Paris John, 6  
Tokio Adam, 5  
Tokio Mike, 3 

它应该返回

Paris, 10, bob 4 
Paris 10, jogn 6 
tokio 8 adam 5 
tokio 8 mike 3 

所以我想获得城市,名称,支付列出城市,SUM(支出),名称,支出。

我知道我可以在2个查询中做到这一点,但我认为这样做会让我的朋友感到惊讶。

编辑:答案是这样的:

SELECT 
    city, name, payout, SUM(payout) 
FROM 
    table 
GROUP BY 
    city, name 
ORDER BY 
    SUM(payout) DESC 
+0

可以随时加入两个查询到一个... – Thilo

+0

...但仍然需要两个查询。而我甚至没有看到一个...... – wildplasser

+0

其实,我明白了! SELECT city,name,payout,SUM(payout)FROM table GROUP BY city,name ORDER BY SUM(payout)DESC 谢谢:) – VixenSoul

回答

1

你可以用一个SELECT(无子查询),如果你使用RDBMS支持窗口功能做:

SELECT city, SUM(payout) OVER (PARTITION BY city) AS sum_per_city, 
     name, payout 
FROM tableX 
ORDER BY sum_per_city DESC 
     , name ASC ;