我想做的是在单个查询中从同一表运行一个子查询,我的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 ...
在各种编程语言中循环显示结果给了我想要的结果,但这不是最有效的方法。我尝试了联合和各种联接,但是找不到运行子查询的正确位置。
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);
INNER JOIN
或LEFT JOIN
或子查询(效率较低)。您可能还需要GROUP BY
的多个级别,并且WHERE
子句可能需要更多条件。