企图分裂两列得到的百分比,但给我0

问题描述 投票:1回答:1

目的:我试图让两列之间的差异%,但我认为问题出在列的类型。

现状:我有两个栏我必须计算NON NULL出现找了很多次的东西每个月是如何发生的。我想这两列之间的%的差异。

查询:

SELECT *
    ,subquery3.[Email Logins Week2]/subquery3.[Email Logins Week1]
FROM    (
        SELECT  
             FORMAT(tbl3.Creation_Date, 'yyyyMM')       AS [Date Subscribed]
            ,CAST(COUNT(CASE WHEN t1.Emails IS NOT NULL THEN 1 ELSE NULL END) AS int)   AS [Email Logins Week1]
            ,CAST(COUNT(CASE WHEN t2.Emails IS NOT NULL THEN 1 ELSE NULL END) AS int)   AS [Email Logins Week2]
        FROM #tbl1 t1
        LEFT JOIN #tbl2 t2
            ON t1.Emails=t2.Emails
        INNER JOIN #tbl3 t3
            ON t1.Emails=t3.email
        GROUP BY FORMAT(t3.Creation_Date, 'yyyyMM')
        ) subquery3

这给了我这样的事情:

+-----------------+--------------------+--------------------+------------------+
| Date Subscribed | Email Logins Week1 | Email Logins Week2 | (No column name) |
+-----------------+--------------------+--------------------+------------------+
|          201801 |               6800 |               2000 |                0 |
|          201802 |               9000 |               3000 |                0 |
|          201803 |               7000 |               2500 |                0 |
|          201804 |               7200 |               2400 |                0 |
+-----------------+--------------------+--------------------+------------------+

代替:

+-----------------+--------------------+--------------------+------------------+
| Date Subscribed | Email Logins Week1 | Email Logins Week2 | (No column name) |
+-----------------+--------------------+--------------------+------------------+
|          201801 |               6800 |               2000 |      0.294117647 |
|          201802 |               9000 |               3000 |      0.333333333 |
|          201803 |               7000 |               2500 |      0.357142857 |
|          201804 |               7200 |               2400 |      0.333333333 |
+-----------------+--------------------+--------------------+------------------+

奖金:有没有一种方法来获得差异%在我的子查询,这样我不创建一个子查询????

sql sql-server format
1个回答
2
投票

这应该为您提供一个答案,“奖金”。请注意我在为远低于尽管其他意见:

SELECT LEFT(CONVERT(varchar(8),t3.Creation_Date,112),6) AS [Date Subscribed], --FORMAT performs poorly, this'll be faster
       COUNT(CASE WHEN t1.Emails IS NOT NULL THEN 1 END) AS [Email Logins Week1], --COUNT already returns an int
       COUNT(CASE WHEN t2.Emails IS NOT NULL THEN 1 END) AS [Email Logins Week2], --I've also removed the ELSE NULL as a CASE expression that doesn't resolve returns NULL
       COUNT(CASE WHEN t1.Emails IS NOT NULL THEN 1 END) / (COUNT(CASE WHEN t2.Emails IS NOT NULL THEN 1 END) * 1.0) AS OtherColumn
FROM #tbl1 t1
     LEFT JOIN #tbl2 t2 ON t1.Emails = t2.Emails
     INNER JOIN #tbl3 t3 ON t1.Emails = t3.email
GROUP BY LEFT(CONVERT(varchar(8),t3.Creation_Date,112),6);
© www.soinside.com 2019 - 2024. All rights reserved.