给一张桌子账单
# 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
如果您只想要这 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)
| 归档时间: |
|
| 查看次数: |
6406 次 |
| 最近记录: |