sql语句怎么根据字段去重

哎,说到SQL里的DISTINCT关键字,这可是个老朋友了。
记得我刚入门的时候,第一次看到这个关键字,心里还挺好奇的,想着这玩意儿怎么就能帮我们去掉重复的数据呢?
说实话,当时我就在想,比如我有一个叫your_table的表,里面有一个字段叫column_name,我想要从这个字段里找出所有不重复的值,那不就得用DISTINCT了。
就这么简单,写法是:
sql SELECT DISTINCT column_name FROM your_table;
这里面的SELECT就是告诉数据库,我要从哪里取数据,DISTINCT后面跟着的就是我要去重的字段。
FROM后面跟上表名,告诉数据库从哪个表里取数据。

有意思的是,后来我发现,这DISTINCT关键字不仅能对一个字段去重,还能对多个字段组合去重。
比如说,我想同时去重column1 和column2 ,那写法就变成了:
sql SELECT DISTINCT column1 , column2 FROM your_table;
这样数据库就会返回column1 和column2 组合起来不重复的行,挺实用的。

说白了,DISTINCT关键字就是让数据库帮我们筛选出那些独特的、不重复的数据,这在数据分析或者数据清洗的时候特别有用。
当然,用这个关键字的时候,也要注意,它只会对返回的行进行去重,如果行本身有重复,但列的值不同,那么这些行还是会出现在结果中。
这块儿我当时也没想明白,后来查了资料才搞清楚。

sql去重,同一个字段出现多条取一条的sql语句

对,就是这个问题。
SQL去重,用窗口函数搞定。

先说简单版,比如按字段分组,只保留每组第一条: sql SELECT a. FROM ( SELECT a., ROW_NUMBER() OVER(PARTITION BY a.column) AS group_idx FROM table_name a ) b WHERE b.group_idx = '1 '
复杂版,先按一个字段分组,再按另一个字段排序,也是用窗口函数: sql SELECT a. FROM ( SELECT a., ROW_NUMBER() OVER(PARTITION BY a.column1 ORDER BY a.column2 DESC) AS group_idx FROM table_name a ) b WHERE b.group_idx = '1 '
其实吧,就是利用ROW_NUMBER()这个窗口函数,按指定字段分组,再排序,最后只取每组第一行。
你自己看,是不是简单又实用?