问题如下。
我们有两个表子查询(A和B)。我需要应用公式
a.Processed / b.Total * 100
逐行,结果显示在新列“活动%”
我尝试了以下查询:
SELECT
(
a.Processed / b.Total * 100
) AS "Activity %"
FROM
(
SELECT
sla_date,
request_type,
CAST(
SUM(sla_value) AS DECIMAL(
10,
2
)
) AS Processed
FROM
table_schema.table_name
WHERE
team = '100'
AND sla_duration_hrs < 480
GROUP BY
sla_date,
request_type
) AS A
JOIN(
SELECT
sla_date,
request_type,
CAST(
SUM(sla_value) AS DECIMAL(
10,
2
)
) AS Total
FROM
table_schema.table_name
WHERE
team = '100'
GROUP BY
sla_date,
request_type
) AS B
ON a.sla_date = b.sla_date
AND a.request_type = b.request_type
但我收到错误
&#34; SQL错误[SE001]:Splice Engine异常:问题调用 ISpliceVisitor访问方法 class.splicemachine.db.impl.sql.compile.FromBaseTable&#34;
我可以使用UNION ALL执行此任务,但实际的表子查询有数百行,解决方案远非优雅且节省时间。
关于如何重写查询的任何想法?
谢谢。
答案 0 :(得分:1)
请尝试以下重写,看看它是否适用于错误:
SELECT
sla_date,
request_type,
CAST(SUM(case when sla_duration_hrs < 480 then sla_value else 0 end)
AS DECIMAL(10,2)) /
CAST(SUM(sla_value) AS DECIMAL(10,2)) AS "Activity %"
FROM
table_schema.table_name
WHERE
team = '100'
GROUP BY
sla_date,
request_type;
答案 1 :(得分:0)
它基本上试图计算sla_duration_hrs小于480的行的sla_value总和的%,而不是团队'100'的sla_value总和。它涉及自我加入。请查看此处的示例http://www.1keydata.com/sql/sql-percent-to-total.html以获取一些想法。