2011-06-01 90 views
1

柱給定一個表賬單從那裏陣列組密鑰由

# bills 
id | name | amount | user_id 
1 | jumper | 100  | 1 
2 | gopper | 200  | 1 
3 | jumper | 150  | 2 
4 | blobber | 300  | 3 

和表的用戶

# users 
id | name 
1 | John Doe 
2 | Mike Marley 
3 | Bill Mickane 
當我執行查詢

select * from bills where user_id in (1,2) order by name, amount desc 

我得到

表的SQL選擇

# bills 
id | name | amount | user_id 
2 | gopper | 200  | 1 
3 | jumper | 150  | 2 
1 | jumper | 100  | 1 

,但我要的是(和所有其他列)

# bills 
name | amount 
gopper | 200 
jumper | 250 

怎麼會變成這樣achived?

我很想用

select * from bills where user_id in (1,2) group by name order by name, amount desc 

但不能作爲group by還需要列表中的其他列名,並最終根據需要不合並兩行。

p.s.我使用PostgreSQL

回答

1
SELECT 
    name, SUM(amount) 
FROM 
    bills 
WHERE 
    user_id IN (1,2) 
GROUP BY 
    name 
ORDER BY 
    name, amount DESC 
1
SELECT name, SUM(amount) as amount 
FROM bills where user_id IN (1,2) 
GROUP BY name 
ORDER BY name, amount DESC 
2

如果你只是想那些2場,你可以使用總金額():

SELECT 
      name, 
      SUM(amount) 
    FROM 
      bills 
    WHERE 
      user_id IN (1,2) 
    GROUP BY 
      name 
    ORDER BY 
      name, 
      amount 

但是,假設你想,不只是這兩個領域。 嵌套查詢應該幫助你。

SELECT 
m.id, m.name, t.userId, t.amount 
FROM Bills m 
INNER JOIN 
(
    SELECT 
      user_id as userID, 
      SUM(amount) as amount 
    FROM 
      bills 
    GROUP BY user_id 
) t 
ON t.UserID = m.UserID 
+0

感謝您的答覆。 'PGError:ERROR:column t.userID does not exist',當我將初始選擇更改爲'select * from bills m ...'時,結果不按名稱分組,即使將內部連接更改爲按名稱分組而不是user_id不能按需要工作(所有賬單中(user_id in(1,2)'按名稱分組)。有什麼想法嗎? – jvatic 2011-06-02 14:03:00

1
select name, sum(amount) as amount 
from bills where user_id in (1,2) 
group by name 
order by name, amount desc