代码基于mysql

在使用 mysql 时候经常遇到需要使用 distinct 语句的时候,首先我们知道对于单列检索,distinct 返回唯一值

例如 原始图表

corporation    number
   Alibaba      1001
   Tencent      1002
   Alibaba      1003
   Netease      1004

使用

SELECT  DISTINCT  corporation 
FROM  table   

返回

corporation    

   Alibaba      
   Tencent      
   Netease      

这个是没问题 的

但是当我们只想得到每个公司的一个number时候,我们使用

SELECT DISTINCT  corporation,name 
FROM table

返回数据是原始数据,这里也就是最容易引起疑惑的,

首先我们明确一点,DISTINCT 用在所有的检测列之前,并且 它是作用于 所有列,不能部分使用

也就是类似

SELECT  id ,DISTINCT  corporation    

这种方式是错误的,那么 在使用 distinct 时候,我们可以把它后面的 所有参数当成一个 也就是 DISTINCT (id,corporation) ,即只有 (id,corporation )这个组合的数据都相同时候,才会被“去重”,否则 还是会保留。

最后我们回到 题目,如果每个公司我只想得到一个代表就行 ,可以使用 group by 语句

SELECT  corporation ,MAX(number),
FROM  table 
GROUP BY  corporation

这样对同一家公司,会保留number 最大的一行,返回

corporation    number

   Tencent      1002
   Alibaba      1003
   Netease      1004

这样就达到目的,所以,当DISTINCT无法满足只对单字段去重,并希望结果中显示对应的多字段内容的时候,可以用group by函数实现。但要注意希望在结果中显示的非去重目标字段,需要对它们分别添加筛选条件的函数或方法,否则sql语句会报错

Logo

更多推荐