gpt4 book ai didi

PostgreSQL,按值分组

转载 作者:行者123 更新时间:2023-11-29 12:40:34 26 4
gpt4 key购买 nike

我有这样的情况,我应该根据列值获得两组的总和结果。这是使用的表和查询的简短示例:

DROP TABLE IF EXISTS mytemptable;
CREATE TEMPORARY TABLE mytemptable(
id integer PRIMARY KEY,
cat text,
val decimal);

INSERT INTO mytemptable VALUES
( 1, ' ', 10),
( 5, 'n', 4.2),
( 6, 'p', 15),
( 7, 'd', 10), --added
( 9, '', 10),
(11, null, 2.3),
(14, 'p', 4.16);

SELECT cat, SUM(val) FROM mytemptable
GROUP BY cat
ORDER BY cat;

... 给出这样的结果:

"";10
" ";10
"d";10
"n";4.2
"p";19.16
"";2.3

从这段代码中,我只需要对两个组求和。一个来自 cat='p',第二个来自所有其他猫。
是否有可能通过 group by/having 或类似的方式在一次通过中获得类似的东西。类似于 GROUP BY cat='p', cat IN('', ' ', 'n', null)。也许这里可以有两个以上的通缉条件。如果是请告诉我如何。

这种情况下想要的结果是:

    "p";19.14 (summed val from cat 'p')
"d";10 (summed val from cat 'd') --added
" ";26.5 (summed val from other cat's than 'p' and 'd')

最佳答案

您可以使用 CASE 表达式进行分组,它将所有 p 类别记录放在一起,并将所有其他非 p 记录放在一起:

SELECT
CASE WHEN cat = 'p' THEN 'p' ELSE ' ' END AS cat,
SUM(val)
FROM mytemptable
GROUP BY CASE WHEN cat = 'p' THEN 'p' ELSE ' ' END
ORDER BY cat DESC;

enter image description here

Demo

编辑:

如果您需要更多的桶,那么只需在 CASE 表达式中添加更多的级别,例如对于您更新的问题,请使用此:

CASE WHEN cat = 'p' THEN 'p'
WHEN cat = 'd' THEN 'd'
ELSE ' ' END

关于PostgreSQL,按值分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52621569/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com