SQL select from table where key in array group by column

jva*_*tic 2 sql postgresql

给一张桌子账单

# bills
id  | name    | amount  | user_id
1   | jumper  | 100     | 1
2   | gopper  | 200     | 1
3   | jumper  | 150     | 2
4   | blobber | 300     | 3
Run Code Online (Sandbox Code Playgroud)

和一个表用户

# users
id  | name
1   | John Doe
2   | Mike Marley
3   | Bill Mickane
Run Code Online (Sandbox Code Playgroud)

当我执行查询时

select * from bills where user_id in (1,2) order by name, amount desc
Run Code Online (Sandbox Code Playgroud)

我得到

# bills
id  | name    | amount  | user_id
2   | gopper  | 200     | 1
3   | jumper  | 150     | 2
1   | jumper  | 100     | 1
Run Code Online (Sandbox Code Playgroud)

但我想要的是(以及所有其他列)

# bills
name    | amount
gopper  | 200   
jumper  | 250   
Run Code Online (Sandbox Code Playgroud)

这将如何实现?

我很想使用

select * from bills where user_id in (1,2) group by name order by name, amount desc
Run Code Online (Sandbox Code Playgroud)

但不能,因为group by还需要列出其他列名,最终不会根据需要合并两行。

ps 我正在使用 postgresql

Jon*_*onH 5

如果您只想要这 2 个字段,您可以使用 Aggregate SUM():

 SELECT 
          name, 
          SUM(amount) 
     FROM 
          bills 
     WHERE 
          user_id IN (1,2) 
     GROUP BY 
          name 
     ORDER BY 
          name, 
          amount
Run Code Online (Sandbox Code Playgroud)

但是,假设您想要的不仅仅是这两个字段......嵌套查询应该可以帮助您。

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
Run Code Online (Sandbox Code Playgroud)