在PostgreSQL中查找分组数据的比率

发布于 2025-02-06 19:05:57 字数 584 浏览 2 评论 0原文

我想在按QY和列2分组数据后找到比率。

在每个季度的比例=计算(B/(B+C))的计数中,即1-2021中的比率为2000/(2000+3000)= 0.4。

分组数据如下:

QY第2列计数
1-2021A1000
1-2021B2000
1-2021C3000
2-2021A5000
2-2021B3000
2-2021C4000

您可以帮助我完成Postgres中的脚本?

I'd like to find ratios after grouping data by QY and Column2.

In every quarter ratio = count of( B/(B+C) ) to be calculated, i.e. in 1-2021 the ratio is 2000/(2000+3000)=0.4.

Grouped data is as follows:

QYColumn 2Count
1-2021A1000
1-2021B2000
1-2021C3000
2-2021A5000
2-2021B3000
2-2021C4000

Could you kindly help me with the script in postgres?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

不如归去 2025-02-13 19:05:57

使用总和和过滤器获取所需的记录。这样的事情应该可以工作:

WITH table_name(q, x, y) AS (
    SELECT *
    FROM
    (VALUES
        ('1-2021','A',  1000),
    ('1-2021','B',  2000),
    ('1-2021','C',  3000),
    ('2-2021','A',  5000),
    ('2-2021','B',  3000),
    ('2-2021','C',  4000) 
    )s
)
SELECT  q
    ,   ROUND(
            SUM(y)  FILTER(WHERE x = 'B')
            /   CAST(SUM(y) AS DECIMAL) 
        ,2) AS ratio
FROM    table_name
WHERE   x IN('B','C')
GROUP BY q
ORDER BY q;

CTE只是为了模拟现有表,仅用于测试。

Use SUM and FILTER to get the records that you need. Something like this should work:

WITH table_name(q, x, y) AS (
    SELECT *
    FROM
    (VALUES
        ('1-2021','A',  1000),
    ('1-2021','B',  2000),
    ('1-2021','C',  3000),
    ('2-2021','A',  5000),
    ('2-2021','B',  3000),
    ('2-2021','C',  4000) 
    )s
)
SELECT  q
    ,   ROUND(
            SUM(y)  FILTER(WHERE x = 'B')
            /   CAST(SUM(y) AS DECIMAL) 
        ,2) AS ratio
FROM    table_name
WHERE   x IN('B','C')
GROUP BY q
ORDER BY q;

The CTE is there just to simulate an existing table, just for testing.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文