在两个表子查询上逐行使用相同的操作集

时间:2017-05-22 14:31:59

标签: sql splice splice-machine

问题如下。 我们有两个表子查询(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执行此任务,但实际的表子查询有数百行,解决方案远非优雅且节省时间。

关于如何重写查询的任何想法?

谢谢。

2 个答案:

答案 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以获取一些想法。