首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何合并多个case语句Postgresql

如何合并多个case语句Postgresql
EN

Stack Overflow用户
提问于 2019-05-15 05:51:27
回答 1查看 85关注 0票数 0

编辑后的问题:

我有一张桌子

代码语言:javascript
运行
复制
CREATE TABLE my_table (id INT, type_key int, rate_1 double precision, rate_2 double precision);

INSERT INTO my_table (id, type_key, rate_1, rate_2) 
VALUES
    (1, NULL, 0.2, 3),
    (2, 1, 1.3, 5),
    (3, 1, NULL, 10),
    (4, 2, 0.5, NULL),
    (5, 2, 0.01, 0),
    (6, 2, 0.75, NULL),
    (7, 3, NULL, NULL),
    (8, 3, 0.34, 1),
    (9, 3, NULL, 1);

理想情况下,结果表应该是:

代码语言:javascript
运行
复制
(id, score_1, score_2)
    (1, NULL, NULL),
    (2, 0, 4),
    (3, NULL, 3),
    (4, 2, NULL),
    (5, 2, 4),
    (6, 3, NULL),
    (7, NULL, NULL),
    (8, 4, 2),
    (9, NULL, 3);

基于如下的评分阈值:

代码语言:javascript
运行
复制
CASE WHEN type_key = 1 THEN (
            CASE
                WHEN rate_1 > .7 THEN 0
                WHEN rate_1 > .5 THEN 1
                WHEN rate_1 > .4 THEN 2
                WHEN rate_1 > .3 THEN 3
                ELSE 4

(对每个type_key_n和rate_n重复上述步骤)

原问题:

为了简单起见,我有一个表,假设它有三列:datenamevalue

我想在此基础上创建一个表,在此表中,我根据value的大小对每个名称进行了分类。

现在,这样做的一种方法是编写:

代码语言:javascript
运行
复制
CREATE TABLE resulting_table AS 
(SELECT DATE,
       name,
       CASE
         WHEN value >= magnitude_1 THEN result_1
         WHEN value >= magnitude_2 THEN result_2
         WHEN value >= magnitude_n THEN result_n
       END AS bins
FROM my_table)

但是随着n的增加,这个查询会变得很长,而且很难辨认。如果我对不同的name有不同的阈值大小,那么我必须做一个嵌套的case语句,如下所示:

代码语言:javascript
运行
复制
CREATE TABLE resulting_table AS 
(SELECT DATE,
       CASE
         WHEN name = 'name_n' THEN
           CASE
             WHEN value >= name_n_magnitude_n THEN result_n_n
           END AS bins 
FROM my_table)

这意味着查询会变得更长、更难读。

对于如何解决这个问题,我有两个想法,但我不太确定哪一个更好,或者我将如何实现它们。

1)为所有namemagnituderesult组合创建单独的表。将此表与my_table连接以获取resulting_table

2)混合使用postgresql/ python copg2和python,以一种易于阅读的方式实现此逻辑。

有什么想法吗?这似乎是一个常见的数据清理/数据工程问题。

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

https://stackoverflow.com/questions/56139115

复制
相关文章

相似问题

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