Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL组并同时计算2个不同的聚合函数_Sql_Amazon Redshift - Fatal编程技术网

SQL组并同时计算2个不同的聚合函数

SQL组并同时计算2个不同的聚合函数,sql,amazon-redshift,Sql,Amazon Redshift,我的桌子是这样的: VIDEO_ID DATETIME APPROVED VIOLATION_COUNT VIDEO_DESCRIPTION VIDEO1 2018-01-02 yes 1 a VIDEO2 2018-06-02 no 2 b VIDEO3 2018-07-04 yes 1 c VIDEO4 2018-01-12

我的桌子是这样的:

    VIDEO_ID  DATETIME APPROVED VIOLATION_COUNT VIDEO_DESCRIPTION
    VIDEO1    2018-01-02 yes    1               a
    VIDEO2    2018-06-02 no     2               b
    VIDEO3    2018-07-04 yes    1               c
    VIDEO4    2018-01-12 yes    1               b
    VIDEO5    2018-06-02 no     2               c
    VIDEO6    2018-07-29 yes    1               a
我需要根据视频描述确定的视频类型对这个表进行分组,这就是我使用SWITCH-CASE语句的原因,请参见下面的查询。 然后,对于每种视频类型,我需要计算两件事:

违反计数和 已批准的违规总数=是。 因此,我希望我的查询返回3列:视频类型、总违规次数之和和和违规次数之和,其中APPROVED=每种视频类型的“yes”

我的问题是如何同时计算违规总数和违规总数(如果已批准=是)

我的问题是:

  SELECT 
      CASE         
            WHEN VIDEO_DESCRIPTION = 'a'                THEN 'Video type 1'
            WHEN VIDEO_DESCRIPTION = 'b'                THEN 'Video type 2'
            WHEN VIDEO_DESCRIPTION = 'c'                THEN 'Video type 3'
            ELSE 'Others' END AS VIDEO_TYPE,

      SUM(VIOLATION_COUNT) AS VIOLATION_COUNT,
      (select count(APPROVED) where APPROVED = 'yes') AS TRUE_POSITIVE_VIOL_COUNT, -- THIS IS NOT WORKING

    FROM my_table
    GROUP BY 
    VIDEO_TYPE
此查询显示以下错误:

无效操作:子查询使用未分组的列my_表。已批准 从外部查询


您可以添加SUMCASE来解决此问题:

SELECT CASE WHEN VIDEO_DESCRIPTION = 'a' THEN 'Video type 1'
            WHEN VIDEO_DESCRIPTION = 'b' THEN 'Video type 2'
            WHEN VIDEO_DESCRIPTION = 'c' THEN 'Video type 3'
            ELSE 'Others' END AS VIDEO_TYPE,
      SUM(VIOLATION_COUNT) AS VIOLATION_COUNT,
      SUM(CASE WHEN APPROVED = 'yes' THEN 1 ELSE 0 END) AS TRUE_POSITIVE_VIOL_COUNT
FROM     tbl
GROUP BY VIDEO_DESCRIPTION;

dbfiddle

您需要实现条件聚合,其中COUNT通过带大小写的SUM模拟。 VIDEO_TYPE | VIOLATION_COUNT | TRUE_POSITIVE_VIOL_COUNT :----------- | --------------: | -----------------------: Video type 1 | 2 | 2 Video type 2 | 3 | 1 Video type 3 | 3 | 1