SQL按顺序选择按顺序分组

时间:2017-07-05 20:08:19

标签: sql-server

我有一个表搜索,列是:

id(int), title(nvarchar), count(int), expression(nvarchar)

值:

1, aaa, 5, car 
2, aaa, 5, car poster
3, bbb, 8, car magazine
4, bbb, 8, car tv
5, ccc, 12, boat
6, ccc, 12 , boat tv

我需要以下结果

4, bbb, 8, car tv
3, bbb, 8, car magazine
2, aaa, 5, car poster
1, aaa, 5, car 

或更好的结果来自4,32,1 像这样:

3, bbb, 8, car magazine
2, aaa, 5, car poster

我试过了:

SELECT   title 
FROM 
    (SELECT * 
     FROM Search 
     ORDER BY count DESC) 
WHERE expression 
LIKE '%car%'
GROUP BY  title 

我还尝试过DISTINCT

1 个答案:

答案 0 :(得分:0)

使用带有CTE功能的ROW_NUMBER来查找匹配的行,并按降序计数和绑定断路器的ID对它们进行排序。然后选择每个分区(标题)中的第一个编号行。

WITH cteFindCar AS (
    SELECT id, title, count, expression,
           ROW_NUMBER() OVER(PARTITION BY title ORDER BY count DESC, id) AS RowNum
        FROM search
        WHERE expression LIKE '%car%'
)
SELECT id, title, count, expression
    FROM cteFindCar
    WHERE RowNum = 1;