如何在 SQL 服务器中对整个结果集进行排名?
How to rank in SQL Server over entire resultset?
看到类似的 RANK() 问题,但我不确定如何设置它的 OVER 部分。
这是我当前的查询,它按最高总降序对项目进行排序:
SELECT c.CONTID, COUNT(*) AS 'Total'
FROM CUSTOMER c
LEFT JOIN CLOGS1516 h
ON c.SERIALNO = h.SERIALNO
LEFT JOIN CUSTUFLD u
ON c.SERIALNO = u.SERIALNO
WHERE EVTYPE = 1
AND DATEADD(minute, OFFSET, h.EVDATE) BETWEEN '2016-01-25' AND '2016-02-21'
AND u.VALUE LIKE 'Retail'
GROUP BY c.CONTID
ORDER BY [Total] DESC
上面的示例输出是:
CONTID Total
109 105
084 88
589 86
610 68
415 58
总共返回了大约 300 行。我现在正在尝试 "rank" 根据与其他项目相比的总数来对每条记录进行比较。不确定我是否在与上面相同的查询中执行此操作,或者它是否是某种子查询。我第一次尝试在 SQL 本身而不是 PHP 端进行排名。
谢谢@ZLK - RANK() OVER (ORDER BY COUNT(*)) 是我一直在寻找的。将它添加到我的 SELECT 行中,并且排名合适。
看到类似的 RANK() 问题,但我不确定如何设置它的 OVER 部分。
这是我当前的查询,它按最高总降序对项目进行排序:
SELECT c.CONTID, COUNT(*) AS 'Total'
FROM CUSTOMER c
LEFT JOIN CLOGS1516 h
ON c.SERIALNO = h.SERIALNO
LEFT JOIN CUSTUFLD u
ON c.SERIALNO = u.SERIALNO
WHERE EVTYPE = 1
AND DATEADD(minute, OFFSET, h.EVDATE) BETWEEN '2016-01-25' AND '2016-02-21'
AND u.VALUE LIKE 'Retail'
GROUP BY c.CONTID
ORDER BY [Total] DESC
上面的示例输出是:
CONTID Total
109 105
084 88
589 86
610 68
415 58
总共返回了大约 300 行。我现在正在尝试 "rank" 根据与其他项目相比的总数来对每条记录进行比较。不确定我是否在与上面相同的查询中执行此操作,或者它是否是某种子查询。我第一次尝试在 SQL 本身而不是 PHP 端进行排名。
谢谢@ZLK - RANK() OVER (ORDER BY COUNT(*)) 是我一直在寻找的。将它添加到我的 SELECT 行中,并且排名合适。