因此,我正在尝试为人员总数报告构建数据模型,该数据模型使用户可以选择要计算的人员总数(动态列)。我尝试查询下面的脚本(这只是一个示例,真实的脚本有多个计数和百分比),并且系统陷入了循环处理中。我的值列表范围是1-5。 Ive还尝试制作固定值列表,并将对分组列的查询放入值中,这也造成了无休止的处理。有什么想法吗?
(SELECT test1.test1,
COUNT(DISTINCT id.personid)
FROM
table_identifiers id,
(SELECT DISTINCT
(CASE WHEN :P_COLUMN = 1 THEN te.ethnicities
WHEN :P_COLUMN = 2 THEN tc.companyname
ELSE NULL END) AS test1
FROM
table_ethnicities te,
table_companies tc
WHERE 1=1
) test1
GROUP BY test1.test1)
答案 0 :(得分:1)
乍一看,您在最内部 test1查询中有一个笛卡尔联接
FROM
table_ethnicities te,
table_companies tc
WHERE 1=1
这时,您在 table_identifiers 和 test1 查询之间有了第二个Caressian联接。
FROM
table_identifiers id,(
...
) test1
GROUP BY test1.test1)
因此,这是此查询的性能低的潜在原因。
要解决test1查询中的问题,我建议使用UNION ALL运算符,例如:
(SELECT test1.test1,
COUNT(DISTINCT id.personid)
FROM
table_identifiers id,
(SELECT DISTINCT te.ethnicities AS test1
FROM table_ethnicities te
WHERE :P_COLUMN = 1
UNION ALL
SELECT DISTINCT tc.companyname
FROM table_companies tc
WHERE :P_COLUMN = 2
) test1
GROUP BY test1.test1)
要修复第二个笛卡尔联接,应添加联接条件。