我试图获得每月的每月总帖数
WITH QuestStatsByMonth AS (
SELECT DATEADD (month, DATEDIFF (month, 0, q.CreationDate), 0) AS [Month],
t.TagName,
SUM (q.Score) AS TotalScore,
q.Id AS id
FROM Posts q
INNER JOIN PostTags pt
ON q.Id = pt.PostId
INNER JOIN Tags t
ON t.Id = pt.TagId
WHERE q.PostTypeId = 1
AND t.TagName IN ('perl6')
GROUP BY DATEADD (month, DATEDIFF (month, 0, q.CreationDate), 0),
t.TagName
)
SELECT
q.[Month], q.TagName + ' questions' AS [Tag], COUNT(q.id) AS Qs
FROM QuestStatsByMonth q
LEFT JOIN QuestStatsByMonth h
ON h.[Month] <= q.[Month]
AND h.TagName = q.TagName
GROUP BY q.[Month], q.TagName
ORDER BY q.[Month], q.TagName
但这会发出一个
列'Posts.Id'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。
我试图在WITH语句中创建COUNT,但是错误在其他地方。有什么想法吗?
答案 0 :(得分:1)
您需要使用agg函数包装q.id
:
WITH QuestStatsByMonth AS (
SELECT DATEADD (month, DATEDIFF (month, 0, q.CreationDate), 0) AS [Month],
t.TagName,
SUM (q.Score) AS TotalScore,
COUNT(q.Id) AS id
FROM Posts q
JOIN PostTags pt
ON q.Id = pt.PostId
JOIN Tags t
ON t.Id = pt.TagId
WHERE q.PostTypeId = 1
AND t.TagName IN ('perl6')
GROUP BY DATEADD (month, DATEDIFF (month, 0, q.CreationDate), 0),
t.TagName
)
SELECT
q.[Month], q.TagName + ' questions' AS [Tag],
SUM(q.id) AS Qs
FROM QuestStatsByMonth q
LEFT JOIN QuestStatsByMonth h
ON h.[Month] <= q.[Month]
AND h.TagName = q.TagName
GROUP BY q.[Month], q.TagName
ORDER BY q.[Month], q.TagName;
<强> SEDE Demo 强>
答案 1 :(得分:1)
摆脱这些位:
SUM (q.Score) AS TotalScore,
和
GROUP BY DATEADD (month, DATEDIFF (month, 0, q.CreationDate), 0), t.TagName
在您的CTE中,您只需过滤问题。如果分组是您在主查询中执行的操作,那么您实际上不应该分组。分组使得无法选择q.Id
:您为每个月/标记要求一行,但每个月/标记通常有多个问题ID。您可以放弃TotalScore
而无需替换它,因为您无论如何都不能使用它。
答案 2 :(得分:1)
我删除了LEFT JOIN
部分。
WITH QuestStatsByMonth AS (
SELECT DATEADD (month, DATEDIFF (month, 0, q.CreationDate), 0) AS [Month],
t.TagName,
SUM (q.Score) AS TotalScore,
COUNT(q.Id) AS id
FROM Posts q
JOIN PostTags pt
ON q.Id = pt.PostId
JOIN Tags t
ON t.Id = pt.TagId
WHERE q.PostTypeId = 1
AND t.TagName IN ('perl6')
GROUP BY DATEADD (month, DATEDIFF (month, 0, q.CreationDate), 0),
t.TagName
)
SELECT
q.[Month], q.TagName + ' questions' AS [Tag],
COUNT(q.id) AS Qs
FROM QuestStatsByMonth q
GROUP BY q.[Month], q.TagName
ORDER BY q.[Month], q.TagName
看起来像你在问什么。