Database 多个值的结果子查询-SQL

Database 多个值的结果子查询-SQL,database,postgresql,Database,Postgresql,当我向QUERY添加多个客户名称时,我从子查询中得到反馈,但是如果您只输入一个值,即使在条件中使用,QUERY也能很好地工作 查询失败 SELECT "CUSTOMER", ( ( ( ( CAST(COUNT(*) AS FLOAT) ) - ( SELECT (CAST(COUNT(*) AS FLOAT)) FROM public.tbl_metrics WHERE

当我向
QUERY
添加多个客户名称时,我从
子查询
中得到反馈,但是如果您只输入一个值,即使在条件中使用
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"
查询成功

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"
“获得反馈”的含义并不十分清楚?我猜您的子查询返回了不止一行(因为内部查询分组多个客户=多个结果)

我建议从一个更简单的版本开始,开始工作,然后添加额外的计算(即百分比)。这里是一个粗略的初始查询(不能保证这会起作用,因为我没有访问您的表的权限,我猜测这就是您希望实现的目标)

“获得反馈”的含义并不十分清楚?我猜您的子查询返回了不止一行(因为内部查询分组多个客户=多个结果)

我建议从一个更简单的版本开始,开始工作,然后添加额外的计算(即百分比)。这里是一个粗略的初始查询(不能保证这会起作用,因为我没有访问您的表的权限,我猜测这就是您希望实现的目标)


如果子查询返回多个结果,此查询将显示错误,因为您执行的减法需要一行结果。。。
当您请求多个客户时,子查询似乎至少返回2行

如果子查询返回多个结果,此查询将显示错误,因为您执行的减法需要一行结果。。。
当您询问多个客户时,子查询似乎至少返回2行

使用名称“CUSTOMER”指定答案。注意:我建议不要使用双引号;这迫使postgres将名称视为区分大小写(不带引号,它会自动将表名转换为小写);该示例仅返回客户至少有一个“NOK”状态的记录(因此在“OK”列中永远不会得到0)。使用名称“customer”回答。注意:我建议不要使用双引号;这迫使postgres将名称视为区分大小写(不带引号,它会自动将表名转换为小写);该示例仅返回客户至少有一个“NOK”状态的记录(因此在“OK”列中永远不会得到0)。