我有像mysql这样的表事务。
____________________________________________________________
| id | noskom | nonpbm | noskop | npbp |
|____|_____________|____________|_____________|_____________|
| 1 | 001 | 10 | 20 | 20 |
| 2 | 001 | 20 | 10 | 20 |
| 3 | 002 | 5 | 10 | 20 |
| 4 | 003 | 30 | 5 | 20 |
|____|_____________|____________|_____________|_____________|
我想要结果
select sum(nonpbm),sum(noskop),sum(npbp) from transaction group by noskom
____________________________________________________________
| id | noskom | nonpbm | noskop | npbp |
|____|_____________|____________|_____________|_____________|
| 1 | 001 | 30 | 30 | 40 |
| 2 | | | | |
| 3 | 002 | 5 | 10 | 20 |
| 4 | 003 | 30 | 5 | 20 |
|____|_____________|____________|_____________|_____________|
什么是mysql查询
答案 0 :(得分:2)
SELECT
noskom ,
SUM(nonpbm) as nonpbm ,
sum(noskop) as noskop ,
sum(npbp) as npbp
FROM mytable
GROUP BY noskom
如果要列出对聚合值有贡献的所有行的ID,您还可以添加此列:
GROUP_CONCAT(id ORDER BY id) AS id
这将为您提供以逗号分隔的ID列表。您可以指定其他分隔符,例如EOL:
GROUP_CONCAT(id ORDER BY id SEPARATOR '\r\n') AS id
'\r\n'
是Windows世界中的标准行分隔符。如果您使用的是其他平台,请更改为'\n'
或'\r'
。
答案 1 :(得分:1)
select transaction.id,t.noskom,t.sum_nonpbm,t.sum_noskop,t.sum_npbp
from transaction
left join
(
select noskom, min(id) min_id,
sum(nonpbm) sum_nonpbm,
sum(noskop) sum_noskop,
sum(npbp) sum_npbp
from transaction
group by noskom
) t on (transaction.id=t.min_id)
order by transaction.id
答案 2 :(得分:1)
尝试此查询::
select tbl2.id,tbl1.noskom,tbl1.sum1,tbl1.sum2,tbl1.sum3 from
(select id,noskom,sum(nonpbm) sum1,sum(noskop) sum2,sum(npbp) sum3 from tbl group by noskom) tbl1
right join
(select id,null a,null b,null c,null d
from tbl) tbl2
on tbl1.id = tbl2.id
order by 1 ;