【发布时间】:2021-04-04 11:19:03
【问题描述】:
我有一个这样的查询:
SELECT
s.siteid,
COUNT(CASE WHEN si.Modified > DATEADD(month, -1, GETDATE()) THEN 1 END) AS ModifiedMonth1,
COUNT(CASE WHEN si.Modified <= DATEADD(month, -1, GETDATE()) AND si.Modified > DATEADD(month, -2, GETDATE()) THEN 1 END) AS ModifiedMonth2,
COUNT(CASE WHEN su.Type = 'Member' THEN 1 END) AS MembersCount,
COUNT(CASE WHEN su.Type = 'Owner' THEN 1 END) AS OwnersCount
FROM
sites s
LEFT JOIN
ScannedItems si ON si.SiteId = s.SiteId
LEFT JOIN
SiteUsers su ON su.SiteId = s.SiteId
GROUP BY
s.SiteId
现在我想从网站表中添加更多列(网址)。现在我可以通过以下方式将列添加到组中:
SELECT
s.siteid,
s.Url,
COUNT(CASE WHEN si.Modified > DATEADD(month, -1, GETDATE()) THEN 1 END) AS ModifiedMonth1,
COUNT(CASE WHEN si.Modified <= DATEADD(month, -1, GETDATE()) AND si.Modified > DATEADD(month, -2, GETDATE()) THEN 1 END) AS ModifiedMonth2,
COUNT(CASE WHEN su.Type = 'Member' THEN 1 END) AS MembersCount,
COUNT(CASE WHEN su.Type = 'Owner' THEN 1 END) AS OwnersCount
FROM
sites s
LEFT JOIN
ScannedItems si ON si.SiteId = s.SiteId
LEFT JOIN
SiteUsers su ON su.SiteId = s.SiteId
GROUP BY
s.SiteId, s.Url
或者我可以在SELECT 中做一个MAX(s.Url) 吗?有什么推荐的做法吗?
【问题讨论】:
-
你的代码没问题。您应该尝试
max(s.Url)的唯一原因是您遇到性能问题。 -
SELECT和GROUP BY或MAX中的列有什么问题? -
两者都在工作。我的问题是一种方法优于另一种方法?什么时候使用一个而不是另一个有什么规则吗?
标签: sql sql-server count left-join aggregate-functions