gpt4 book ai didi

mysql - 带有 SUM 的 IF 在 MySQL 中产生不正确的结果

转载 作者:行者123 更新时间:2023-11-29 07:34:39 25 4
gpt4 key购买 nike

当我尝试将 SUM 插入 IF 子句时,我得到了不正确的结果。当我使用 COUNT 时,结果是正确的,当我使用 SUM 时,结果要么不正确,要么为 NULL。我已经能够通过另一个查询为每个语句生成正确的结果(作为验证公式的一种方式)。在 IF 语句中获得 SUM 的正确结果的语法是什么?基于另一个 StackOverflow 问题,我试图修正公式,但它产生了一个错误。

SELECT
IF (Artist LIKE '%Hillsong%' , 'Hillsong', NULL ) as Artist,

COUNT(IF(CCD BETWEEN 28 AND 730,1,NULL)) AS 1_CC, -- result 191, which is correct
IF(CCD BETWEEN 28 AND 730, SUM(CC28),NULL) AS 2_CC, -- result NULL, should be 610 xx
COUNT(IF(CCD > 28,1,NULL)) AS 3_CC, -- result 684, which is correct
COUNT(IF(CCD < 730,1,NULL)) AS 4_CC, -- result 502, which is correct
IF(CCD > 28,SUM(CC28),NULL) AS 5_CC, -- result 2253, should be 1882 xx
--- SUM(IF(CCD > 28,CC28,NULL) AS 6_CC, -- my attempt to fix, creates error
IF(CCD < 730,SUM(CC28),NULL) AS 7_CC -- result NULL, shoul be 981 xx

FROM praisecharts_reporting.large_sales_report
GROUP BY 1;

作为引用框架,我是一名音乐出版商,我正在尝试获取艺术家包含“Hillsong”的所有歌曲的结果,其中和弦图 (CC) 在 28 到 730 天之间可用 (CCD 28 和 730 之间)。 COUNT 应该告诉我有多少歌曲标题符合条件,SUM 应该告诉我所有符合条件的歌曲的总销量。

最佳答案

我找到了问题的答案。将 IF 子句放入 SUM 的语法是使用 CASE WHEN。下面是我上面的查询的解决方案,它产生了正确的结果:

SELECT
IF (Artist LIKE '%Hillsong%' , 'Hillsong', NULL ) as Artist,

COUNT(IF(CCD BETWEEN 28 AND 730,1,NULL)) AS 1_CC,
SUM(CASE WHEN CCD BETWEEN 28 AND 730 THEN CC28 ELSE 0 END) AS 2_CC,
COUNT(IF(CCD > 28,1,NULL)) AS c3_CC,
COUNT(IF(CCD < 730,1,NULL)) AS c4_CC,
SUM(CASE WHEN CCD > 28 THEN CC28 ELSE 0 END) AS 5_CC,
SUM(CASE WHEN CCD < 730 THEN CC28 ELSE 0 END) AS 6_CC

FROM praisecharts_reporting.large_sales_report
GROUP BY 1;

关于mysql - 带有 SUM 的 IF 在 MySQL 中产生不正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49547041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com