我们在查询数据的时候经常会遇到表中包含类似“类型”、“分组”等属性字段。然后需要查询出该分组下的第一条记录。
实现的SQL如下:
select Name,Link,Type from (
SELECT ROW_NUMBER() OVER(partition by Type ORDER BY Name) as row, * FROM MovieInfo WHERE MovieType is not null
) t
where t.row=1
union
SELECT Name,Link,MovieType FROM MovieInfo WHERE MovieType is null
其中最关键的一点是:ROW_NUMBER() OVER(partition by Type ORDER BY Name) as row 。partition:分组统计最好用的方法。
这行代码的意思就是根据Type进行分组,然后Order By name进行组内排序,产生一个新列:row。
当row=1的时候就取出了第一条记录。
最后的一个Union是把type为空的数据也取出来,因为partition 关键词会忽略掉为空的数据。