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