SQL Count/sum in order子句
我正在为我正在使用的工具制作一个“排行榜”,我需要收集一些数字,并获得多行记录的数量 在这个存储过程中,您将看到我试图按两列之和对记录进行排序 关于如何做到这一点有什么建议吗SQL Count/sum in order子句,sql,sql-server,tsql,Sql,Sql Server,Tsql,我正在为我正在使用的工具制作一个“排行榜”,我需要收集一些数字,并获得多行记录的数量 在这个存储过程中,您将看到我试图按两列之和对记录进行排序 关于如何做到这一点有什么建议吗 AS BEGIN SET NOCOUNT ON; BEGIN SELECT DISTINCT(whoAdded), count(tag) as totalTags, count(DISTINCT data
AS
BEGIN
SET NOCOUNT ON;
BEGIN
SELECT DISTINCT(whoAdded),
count(tag) as totalTags,
count(DISTINCT data) as totalSubmissions
FROM Tags_Accounts
GROUP BY whoAdded
ORDER BY SUM(totalTags + totalSubmissions) DESC
FOR XML PATH ('leaderboard'), TYPE, ELEMENTS, ROOT ('root');
END
END
您可以通过将其放入派生表中来实现这一点:
SELECT *
FROM (
SELECT DISTINCT(whoAdded) AS whoAdded,
count(tag) as totalTags,
count(DISTINCT data) as totalSubmissions
FROM Tags_Accounts
GROUP BY whoAdded
) a
ORDER BY totalTags + totalSubmissions DESC
FOR XML PATH ('leaderboard'), TYPE, ELEMENTS, ROOT ('root')
或者,您可以按集合订购,但我认为上面的内容更简洁/冗余更少:
SELECT DISTINCT(whoAdded) as whoAdded,
count(tag) as totalTags,
count(DISTINCT data) as totalSubmissions
FROM Tags_Accounts
GROUP BY whoAdded
ORDER BY SUM(count(tag) + count(DISTINCT data)) DESC
FOR XML PATH ('leaderboard'), TYPE, ELEMENTS, ROOT ('root')
不要使用SUM()
,只需使用+
添加值,只需使用表达式而不是列别名:
ORDER BY count(*) + count(DISTINCT data) DESC
出现了什么错误?列名“totalTags”无效。和totalSubmissions,您会收到这些错误,因为
totalTags
和totalSubmissions
只是别名。第一个返回无效的列名“totalTags”。列名“totalSubmissions”无效。内部选择是否有效?如果没有,会出现什么错误?是否可以在没有排序依据的情况下运行它?它还会引发错误:“a”的第1列没有指定列名。如果没有排序依据,它将返回a的第1列上面提到的错误
ORDER BY count(*) + count(DISTINCT data) DESC