首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >选择列以及sum()

选择列以及sum()
EN

Stack Overflow用户
提问于 2020-02-19 16:35:30
回答 2查看 60关注 0票数 1

我在获取列时遇到了问题,我还想获得total_amount的总和。

代码语言:javascript
运行
复制
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查询:

代码语言:javascript
运行
复制
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查询如下所示(但我不能这样做,因为会出现提示错误):

代码语言:javascript
运行
复制
SELECT 
    id, 
    sheet_number, 
    transaction_status, 
    sum(total_amount) AS total FROM purchase
GROUP BY transaction_status

预期的结果将是:

代码语言:javascript
运行
复制
[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的和。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-19 16:37:51

您可以使用窗口函数:

代码语言:javascript
运行
复制
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;
票数 3
EN

Stack Overflow用户

发布于 2020-02-19 16:58:17

您可以尝试内部连接以获得如下所示的输出。

在这里,我获得了按事务状态分组的总金额,并基于事务状态列完成了与实际表的连接。

代码语言:javascript
运行
复制
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演示。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60296010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档