sql - 如何在某些条件下合并行postgres Sql
问题描述
我有个问题。下面是我的sql。
SELECT upniki.naziv,
(
SELECT count(caseid)
FROM terjatve, paket
WHERE terjatve.stevilkapaketa=paket.id_paket
AND terjatve.idnarocnik=upniki.id_upnik
AND paket.datum_predaje >='1900-03-01'
AND paket.datum_predaje <='2020-03-31'
GROUP BY upniki.naziv) as st_vseh_primerov,
(
SELECT sum(racuni.startsum)
FROM racuni, paket, terjatve
WHERE terjatve.stevilkapaketa=paket.id_paket
AND terjatve.caseid=racuni.caseid
AND terjatve.idnarocnik=upniki.id_upnik
AND paket.datum_predaje >='1900-03-01'
AND paket.datum_predaje <='2020-03-31'
GROUP BY upniki.naziv) as glavnica_vseh_primerov,
(
SELECT count(caseid)
FROM terjatve, paket
WHERE terjatve.stevilkapaketa=paket.id_paket
AND terjatve.idnarocnik=upniki.id_upnik
AND paket.datum_predaje >='1900-03-01'
AND paket.datum_predaje <='2020-03-31'
AND terjatve.statusnacinid='1'
GROUP BY upniki.naziv) as st_aktivnih
FROM upniki
GROUP BY upniki.naziv, upniki.id_upnik
使用此 SQL,我得到如下结果。
naziv st_vseh_primerov glavnica_vseh_primerov st_aktivnih
CLIENT 1 12 7500 0
CLIENT 2 10 40000 0
CLIENT 3 15 5000 0
CLIENT 4 16 15000 0
CLIENT 5 9 12000 0
CLIENT 6 8 60000 1
CLIENT 7 4 3000 0
CLIENT 8 3 10000 0
我需要的结果是将 st_vseh_primerov <=10 的行合并为一行。作为组合主题的行将不再显示。所以,结果应该是这样的:
naziv st_vseh_primerov glavnica_vseh_primerov st_aktivnih
CLIENT 1 12 7500 0
CLIENT 3 15 5000 0
CLIENT 4 16 15000 0
SME 34 125000 1
请如果有人可以提供帮助。
Br R。
解决方案
您可以将现有查询转换为 cte 或子查询,并在外部查询中聚合:
with cte as (... your query here ...)
select
case when c.st_vseh_primerov <= 10
then 'SME'
else c.naviz
end naviz,
SUM(st_vseh_primerov) st_vseh_primerov,
SUM(glavnica_vseh_primerov) glavnica_vseh_primerov,
SUM(st_aktivnih) st_aktivnih
from cte c
group by
case when c.st_vseh_primerov <= 10
then 'SME'
else c.naviz
end
请注意,您不应该使用隐式连接(在from
子句中使用逗号);这是几十年前的旧语法,不应该出现在新代码中。相反,您应该使用标准的显式连接(使用on
关键字)。所以基本上,像这样的东西(来自你的第一个子查询):
FROM terjatve, paket
WHERE
terjatve.stevilkapaketa=paket.id_paket
AND terjatve.idnarocnik=upniki.id_upnik
应该写成:
FROM terjatve
INNER JOIN paket ON terjatve.stevilkapaketa=paket.id_paket
WHERE terjatve.idnarocnik=upniki.id_upnik
推荐阅读
- vue.js - 使用 vee-validate 验证 vue-select
- git - 使用 git merge --continue 而不是 git rebase --continue
- javascript - 优化JS文件
- wordpress - Woocommerce 价格过滤器在 Divi 主题生成器中不起作用
- linux - 如果不存在,如何设置 docker env 变量?
- c++ - 什么是 C++ 中的 IN、OUT 和 IN/OUT 参数模式
- postgresql - 如何在postgresql中实现动态sql函数?
- arm - 在 ARM 处理器的链接描述文件中使用 PROVIDE 关键字
- google-apps-script - 将一张纸附加到另一张纸中提到的邮件ID
- react-native-android - 如何在本机反应中将图像添加到吐司,有可能吗?