同一表上的子查询

问题描述 投票:0回答:2

我想做的是在单个查询中从同一表运行一个子查询,我的SQL在下面:

    SELECT 
        DATEPART(DAY, dateTimeCreated) AS DateClicked,
        COUNT(*) AS NumClicks
    FROM [dbo].[tbl_clicks]
    WHERE 0 = 0
        AND DATEPART(MONTH, dateTimeCreated) = 'GIVEN MONTH'
        AND DATEPART(YEAR, dateTimeCreated) = 'GIVEN YEAR'
    GROUP BY DATEPART(DAY, dateTimeCreated)
    ORDER BY DATEPART(DAY, dateTimeCreated);

直截了当,这正是我想要的-给定年份中给定月份中每一天的点击次数。

 DateClicked | NumClicks
---+-------------+------------
1            | 102215
2            | 256415
3            | 241314
etc ...

根据此结果,我希望找出属于特定类别的点击次数,例如每天的社交媒体点击次数,电子邮件发送次数等等(每天总计,然后细分)总)。我可以通过在SQL中添加另一个AND运算符来轻松实现这一点,

AND clickType IN ( 'IDENTIFIER' )

但是涉及创建另一个完整的语句;我想从一个查询中获得这些结果。

 DateClicked | NumClicks  |  Social |  Email | ...
---+-------------+--------------------------------
1            | 102215     |  38281  |  345   | ...
2            | 256415     |  12333  |  23    | ...
3            | 241314     |  44552  |  653   | ...
etc ...

在各种编程语言中循环显示结果给了我想要的结果,但这不是最有效的方法。我尝试了联合和各种联接,但是找不到运行子查询的正确位置。

sql sql-server subquery
2个回答
0
投票
仅使用条件聚合:

SELECT DAY(dateTimeCreated) AS DateClicked, COUNT(*) AS NumClicks, SUM(CASE WHEN clickType = 'Social' THEN 1 ELSE 0 END) as social, SUM(CASE WHEN clickType = 'Email' THEN 1 ELSE 0 END) as email, . . . FROM [dbo].[tbl_clicks] WHERE MONTH(dateTimeCreated) = 'GIVEN MONTH' YEAR(dateTimeCreated) = 'GIVEN YEAR' GROUP BY DAY(dateTimeCreated) ORDER BY DAY(dateTimeCreated);


-1
投票
您的问题表示您希望从多个表中获取数据。然后,您需要INNER JOINLEFT JOIN或子查询(效率较低)。您可能还需要GROUP BY的多个级别,并且WHERE子句可能需要更多条件。
© www.soinside.com 2019 - 2024. All rights reserved.