【问题标题】:SQL Cast, Case and Count functionSQL Cast、Case 和 Count 函数
【发布时间】:2020-02-17 02:17:45
【问题描述】:

我正在尝试计算打开的电子邮件行数,并将其除以发送的电子邮件总数,然后将其转换为小数(因此它显示百分比)。

我收到错误消息:"An error occurred while checking the query syntax. Errors: Incorrect syntax near ')'."

我已尝试将代码分开,以便我可以分别获取 count 和 case 函数以进行转换。演员在没有计数/案例的情况下工作。计数/案例也可以独立工作,只是似乎不能一起工作。我在这里遗漏了什么吗?

SELECT
SubscriberKey
,CAST(
 ((COUNT(CASE 
                WHEN PreviousMonth <= 1
                    AND SendType = 'Auto'
                    AND Opened = 1
                    THEN 1
                ELSE NULLEND ))/
        (COUNT(CASE 
                WHEN PreviousMonth <= 1
                    AND SendType = 'Auto')))
AS DECIMAL(18,4)) * 100 AS 'AverageOpen'
FROM Data
GROUP BY SubscriberKey

An error occurred while checking the query syntax. Errors: Incorrect syntax near ')'.

【问题讨论】:

    标签: sql casting count case


    【解决方案1】:

    我会用SUM(CASE) 写这个。注意两点:

    • 1.0 所以除法不是整数(这在某些数据库中可能是个问题。
    • 分母中没有else以避免被零除

    我也省略了cast()

    SELECT SubscriberKey
           (SUM(CASE WHEN PreviousMonth <= 1 AND
                          SendType = 'Auto'
                          Opened = 1
                     THEN 1.0 ELSE 0 
                END) /
            SUM(CASE WHEN PreviousMonth <= 1 AND
                          SendType = 'Auto'
                     THEN 1   -- no else so no divide by 0
                END)
           ) * 100 AverageOpen
    FROM Data
    GROUP BY SubscriberKey;
    

    您的代码可能会失败,因为 SQL 无法识别 NULLEND

    【讨论】:

    • 我不需要 COUNT 因为我需要用 CASE 标准计算行数吗?
    • @s3329893 。 . . SUM(1) = COUNT(*).
    【解决方案2】:

    我认为您在这里想要实现的是获得averageopened = 1 divided by all

    SELECT cast((t1.Opened/t1.OverAll) as decimal(18,4)) * 100.00 as 'AverageOpen'
    FROM
        (SELECT 
            SubscriberKey
            , SUM(CASE WHEN PreviousMonth <= 1 AND SendType = 'Auto' AND Opened = 1 THEN 1 ELSE 0 END) Opened,
            , SUM(CASE WHEN PreviousMonth <= 1 AND SendType = 'Auto' THEN 1 ELSE 0 END) OverAll
        FROM Data 
        GROUP BY SubscriberKey) as t1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-27
      • 1970-01-01
      • 1970-01-01
      • 2015-09-12
      • 2015-09-05
      • 2011-03-28
      • 1970-01-01
      相关资源
      最近更新 更多