我在获取列时遇到了问题,我还想获得total_amount的总和。
CREATE TABLE purchase (
id int,
sheet_number varchar(255),
total_amount decimal(23,6),
transaction_status int
);
INSERT INTO purchase (id, sheet_number, total_amount, transaction_status)
VALUES (
'1', 'PO10010000001', '120.18', 1,
'2', 'PO10010000002', '87.23', 1,
'3', 'PO10010000003', '53.56', 3,
'4', 'PO10010000004', '150.28', 4,
'5', 'PO10010000005', '160.53' 3,
);我想要获得列以及这个关于transaction_status的total_amount (group by)的和。
我已经创建了一个类似这样的SQL查询,但它不能与预期的查询一起工作。
下面是我执行的SQL查询:
SELECT
id,
sheet_number,
transaction_status,
sum(total_amount) AS total FROM purchase
GROUP BY transaction_status, id, sheet_number我认为问题是因为我在GROUP BY子句中列出了其他列/属性。
但我需要它,因为它将提示一条错误消息,指出该列无效,因为它没有包含在group by子句中。
预期的SQL查询如下所示(但我不能这样做,因为会出现提示错误):
SELECT
id,
sheet_number,
transaction_status,
sum(total_amount) AS total FROM purchase
GROUP BY transaction_status预期的结果将是:
[id],[sheet_number],[total],[transaction_status]
[1],[PO10010000001],[207.41],[1],
[2],[PO10010000002],[207.41],[1],
[3],[PO10010000003],[214.09],[3],
[4],[PO10010000004],[150.28],[4],
[5],[PO10010000005],[214.09],[3]我只想得到所有相同的列,但我也可以得到total_amount的和。
发布于 2020-02-19 16:37:51
您可以使用窗口函数:
SELECT p.id, p.sheet_number, p.transaction_status,
SUM(p.total_amount) OVER (PARTITION BY p.transaction_status) AS total
FROM purchase p
ORDER BY p.id;发布于 2020-02-19 16:58:17
您可以尝试内部连接以获得如下所示的输出。
在这里,我获得了按事务状态分组的总金额,并基于事务状态列完成了与实际表的连接。
SELECT purchase.id
,purchase.sheet_number
,b.total AS total_amount
,purchase.transaction_status
FROM purchase
INNER JOIN (
SELECT transaction_status
,SUM(total_amount) AS total
FROM purchase
GROUP BY transaction_status
) b ON purchase.transaction_status = b.transaction_status这是db<>fiddle演示。
https://stackoverflow.com/questions/60296010
复制相似问题