【发布时间】:2019-01-31 02:02:24
【问题描述】:
我正在寻找在查询中使用 CTE,因为我得到了相同的选择,但我以前从未使用过 CTE,有人可以帮助我吗?
我需要 firstTable 可以在其他选择中使用
SELECT firstTable.id as id,
secondTable.holder as holder
FROM (
select tb3.id as id
from table1 tb1
inner join table2 tb2 on tb1.tb2_id = tb2.id
inner join table3 tb3 on tb2.tb3_id = tb3.id and tb3.id
inner join table4 tb4 on tb4.id = tb3.tb4_id and tb4.id = 1998
group by tb3.id) as firstTable
JOIN (
select id_holder,
sum(temporaryTable.holder) as holder
from (
select cast(tb4.helper as integer) as helper,
count(distinct tb4.id) as holder,
tb3.id as id_holder
from table1 tb1
inner join table2 tb2 on tb1.tb2_id = tb2.id
inner join table3 tb3 on tb2.tb3_id = tb3.id and tb3.id
inner join table4 tb4 on tb4.id = tb3.tb4_id and tb4.id = 1998
group by tb3.id, tb4.helper
) as temporaryTable
where temporaryTable.helper between 7 and 8
group by id_holder) as secondTable
ON firstTable.id = temporaryTable.id_holder
这是我的尝试查询:
WITH temporary_table AS
( SELECT id,
cast(resp.valor AS integer) AS holder,
count(val) AS sumId
FROM table1 tb1
INNER JOIN table2 tb2 ON tb1.tb2_id = tb2.id
INNER JOIN table3 tb3 ON tb2.tb3_id = tb3.id
AND tb3.id
INNER JOIN table4 tb4 ON tb4.id = tb3.tb4_id
AND tb4.id = 1998
GROUP BY tb3.id )
SELECT
(SELECT SUM(sumId)
WHERE holder = -10) AS p1,
(SELECT SUM(sumId)
WHERE holder = 78) AS p2,
(SELECT SUM(sumId)
WHERE holder = 1997) AS p3,
id
FROM temporary_table
GROUP BY id,
holder;
【问题讨论】:
-
我是,但我不能把我的“where”子句放在最后:/它不起作用
-
如果你在这里发布你的
no working会更好。我们很高兴帮助您解决这个问题,而不仅仅是为您编写所有这些 cte -
@PhamX.Bach 我会编辑问题
-
您的
CTE查询似乎不等于您的第一个查询。即使您不使用CTE,您的SELECT (select SUM(sumId) where holder = -10) as p1,也将不起作用。您应该将其更改为SELECT SUM(CASE WHEN holder = -10 THEN sumId END) AS p1,而不是按持有者分组
标签: sql postgresql common-table-expression query-performance