用于多重值的结果子查询-SQL

问题描述 投票:0回答:2

[当我在SUBQUERY中添加多个客户名称时,我从QUERY获得了反馈,但是,即使您仅输入一个值,即使使用IN条件,QUERY也可以正常工作

查询失败

SELECT "CUSTOMER",
    ( ( ( ( CAST(COUNT(*) AS FLOAT) ) - (
        SELECT
            (CAST(COUNT(*) AS FLOAT))
        FROM
            public.tbl_metrics
        WHERE
            "CUSTOMER" IN (
                'CLIENT1','CLIENT2','CLIENT3'
            )
            AND "STATUS" = 'NOT_TESTED'
        GROUP BY
            "STATUS",
            "CUSTOMER"
    ) ) / CAST(COUNT(*) AS INT) ) * 100) as "PERCENT", count("STATUS") as "OK"
FROM
    public.tbl_metrics
WHERE
    "CUSTOMER" IN (
        'CLIENT1','CLIENT2','CLIENT3'
    )
    AND "STATUS" = 'NOK'
GROUP BY
    "STATUS",
    "CUSTOMER"

成功查询

SELECT "CUSTOMER",
    ( ( ( ( CAST(COUNT(*) AS FLOAT) ) - (
        SELECT
            (CAST(COUNT(*) AS FLOAT))
        FROM
            public.tbl_metrics
        WHERE
            "CUSTOMER" IN (
                'CLIENT1'
            )
            AND "STATUS" = 'NOT_TESTED'
        GROUP BY
            "STATUS",
            "CUSTOMER"
    ) ) / CAST(COUNT(*) AS INT) ) * 100) as "PERCENT", count("STATUS") as "OK"
FROM
    public.tbl_metrics
WHERE
    "CUSTOMER" IN (
        'CLIENT1'
    )
    AND "STATUS" = 'NOK'
GROUP BY
    "STATUS",
    "CUSTOMER"
database postgresql
2个回答
1
投票
如果您的子查询返回多个结果,则该查询将显示错误,因为您进行的减法需要一行结果...当您请求多个客户时,您的子查询似乎至少返回2行

1
投票
还不清楚“获得反馈”是什么意思?我猜您的子查询返回的行多(由于内部查询将多个客户分组=多个结果)。

我建议从一个简单的版本开始,使其正常运行,然后添加额外的计算(即百分比)。这是一个粗略的入门查询(不保证它能正常工作,因为我无权访问您的表,并且正在猜测这就是您希望完成的工作)。

SELECT met."CUSTOMER", ( SELECT COUNT(*) FROM public.tbl_metrics innerMet WHERE innerMet."CUSTOMER"= met."CUSTOMER" AND "STATUS" = 'NOT_TESTED' ) as "NOT_TESTED", count("STATUS") as "OK" FROM public.tbl_metrics met WHERE met."CUSTOMER" IN ( 'CLIENT1','CLIENT2','CLIENT3' ) AND met."STATUS" = 'NOK' GROUP BY met."STATUS", met."CUSTOMER"

© www.soinside.com 2019 - 2024. All rights reserved.