`
flex_莫冲
  • 浏览: 1091844 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

sql distinct某个字段

 
阅读更多

distinct必须放在第一个位置。若放到后面是会报错的。

若要指定某个字段的distinct,需要以该字段group by 再加上一个count(distinct name);

参考来源

在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是 distinct只能返回它的目标字段,而无法返回其它字段,这个问题让我困扰了很久,用distinct不能解决的话,我只有用二重循环查询来解决,而 这样对于一个数据量非常大的站来说,无疑是会直接影响到效率的。所以我花了很多时间来研究这个问题,网上也查不到解决方案

下面先来看看例子:

     table
   id name
   1 a
   2 b
   3 c
   4 c
   5 b

库结构大概这样,这只是一个简单的例子,实际情况会复杂得多。

比如我想用一条语句查询得到name不重复的所有数据,那就必须使用distinct去掉多余的重复记录。

select distinct name from table
得到的结果是:

   name
   a
   b
   c

好像达到效果了,可是,我想要得到的是id值呢?改一下查询语句吧:

select distinct name, id from table

结果会是:

   id name
   1 a
   2 b
   3 c
   4 c
   5 b

distinct怎么没起作用?作用是起了的,不过他同时作用了两个字段,也就是必须得id与name都相同的才会被排除。。。。。。。

我们再改改查询语句:

select id, distinct name from table

很遗憾,除了错误信息你什么也得不到,distinct必须放在开头。难到不能把distinct放到where条件里?能,照样报错。。。。。。。

很麻烦吧?确实,费尽心思都没能解决这个问题。

 

用count函数一试,成功,我。。。。。。。想哭啊,费了这么多工夫。。。。。。。。原来就这么简单。。。。。。

现在将完整语句放出:

select *, count(distinct name) from table group by name

结果:

   id name count(distinct name)
   1 a 1
   2 b 1
   3 c 1

最后一项是多余的,不用管就行了,目的达到。。。。。

唉,原来mysql这么笨,轻轻一下就把他骗过去了,郁闷也就我吧(对了,还有容容那家伙),现在拿出来希望大家不要被这问题折腾。

哦,对,再顺便说一句,group by 必须放在 order by 和 limit之前,不然会报错。。。。。。。。!OK了

如:SELECT DISTINCT FUserId,FShareCount,count(distinct FUserId) FROM t_talent_channel_share WHERE * Group by FUserId Order by FShareCount desc limit 10;

分享到:
评论

相关推荐

    完美解决distinct中使用多个字段的方法

    完美解决distinct中使用多个字段的方法,完美解决distinct中使用多个字段的方法完美解决distinct中使用多个字段的方法完美解决distinct中使用多个字段的方法完美解决distinct中使用多个字段的方法

    mysql中distinct用法【SQL中distinct的用法】.docx

    使用 DISTINCT 关键字时,SELECT 语句中只能显示 DISTINCT 指定的字段,其他字段将被忽略。例如: ``` SELECT DISTINCT name, remark FROM A; ``` 这条语句将返回错误,因为 DISTINCT 关键字只能作用于 name 字段...

    SQL查询动态字段

    根据提供的信息,我们可以了解到本文档主要探讨了在SQL Server中如何进行动态字段查询的问题,尤其关注于处理非标准数据格式的情况。文档中的示例代码显示了如何在一个包含混合类型(如字符串和数值)的表中执行查询...

    alibaba-developer#MaxCompute#解决MaxCompute SQL count distinct多个字段

    解决MaxCompute SQL count distinct多个字段的方法按照惯性思维,统计一个字段去重后的条数我们的sql写起来如下:Distinct的作用

    SQL中distinct的用法(四种示例分析)

    在 SQL 中,`DISTINCT` 必须放置在 `SELECT` 语句的最前面,不能单独应用于某一个字段。如果想要获取 `name` 的唯一值以及对应的 `id`,可以使用子查询或者窗口函数来实现: ```sql SELECT id, name FROM ( SELECT...

    MySQL中索引优化distinct语句及distinct的多字段操作

    MySQL通常使用GROUPBY(本质上是排序动作)完成DISTINCT操作,如果DISTINCT操作和ORDERBY操作组合使用,通常会用到临时表.这样会影响性能. 在一些情况下,MySQL可以使用索引优化DISTINCT操作,但需要活学活用.本文涉及一个...

    解析mysql不重复字段值求和

    在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是...

    分析MySQL中优化distinct的技巧

    上述场景中,用户遇到了一个问题:对一个10G以上的单表`user_access_xx_xx`执行`SELECT COUNT(DISTINCT nick)`以统计唯一用户访问(UV)时,即使有`nick`字段的索引,执行计划仍然显示全索引扫描,导致服务器性能受...

    小度写范文【SQL中distinct的用法】mysql中distinct用法模板.docx

    当我们需要从一个表中获取唯一的某一列的值时,可以使用`DISTINCT`关键字。例如,在表A中,如果我们只想看到所有不重复的名字,我们可以编写如下SQL语句: ```sql SELECT DISTINCT name FROM A; ``` 这将返回一...

    SQL Server把某个字段的数据用一条语句转换成字符串

    在SQL Server中,有时我们需要将某个表字段中的多个数据项合并为一个字符串,这通常用于生成报告、拼接查询条件或其他需要数据集合作为单一文本的情况。本篇将详细讲解如何使用一条SQL语句实现这一功能。 首先,...

    sql server 中合并某个字段值的实例

    在SQL Server中,有时我们需要对某个字段的值进行合并,特别是在数据分析或报表生成时,这种情况很常见。本实例探讨了如何在SQL Server中合并特定字段的值,特别是针对相同ID的记录。我们将通过一个实际的例子来理解...

    LINQ to SQL手册

    7. **Exists/In/Any/All/Contains**:这些谓词用于检查条件的存在性,如 `Exists` 检查是否存在满足条件的记录,`In` 检查某个值是否在列表中等。 8. **Concat/Union/Intersect/Except**:集合操作符,用于合并(`...

    EFCore查询不重复数据Distinct.docx

    `Distinct()`方法默认只考虑单个字段。为了根据多个字段进行去重,你需要创建一个匿名类型来包含这两个字段,并使用这个匿名类型的等价关系进行去重。例如,如果我们有两个字段`field1`和`field2`,可以这样做: ``...

    小度写范文【SQL中distinct的用法】mysql中distinct用法模板.pdf

    使用`DISTINCT`时,`SELECT`语句中显示的字段仅限于`DISTINCT`指定的列。如果你还需要显示其他列的数据,比如在`DISTINCT name`的同时展示`备注`列的内容,直接使用`DISTINCT`是无法实现的。这时,你可以考虑使用子...

    oracle某个字段多行记录转化为一行

    根据提供的信息,本文将详细介绍如何在Oracle数据库中将某个字段的多行记录转换为一行记录的方法。这种方法在处理大量数据时非常有用,特别是在需要将多个值汇总到一个字段中的场景下。 ### 标题理解:“oracle某个...

    SQL语句常用汇总

    SELECT DISTINCT 字段名 FROM 数据表; ``` 2. **计数查询**: `COUNT(*)`函数可以计算表中的记录数。如果要按特定字段计数,可以这样做: ```sql SELECT COUNT(*) FROM 数据表 WHERE 字段名1 BETWEEN #日期1# ...

    查询重复数据sql语句

    本文将详细介绍如何使用SQL语句来查询表中的重复数据,并基于提供的SQL示例进行深入分析。 ### SQL查询重复数据的核心概念 在开始之前,我们需要了解几个关键的概念: 1. **重复数据**:指的是在数据表中存在多条...

    sqlServer删除重复数据

    SQL Server 删除重复数据 SQL Server 删除重复数据是数据库管理中的一项重要任务。重复数据可能是完全重复的记录,也可能是部分关键字段重复的记录。删除重复数据可以使用多种方法,包括使用 SELECT DISTINCT 语句...

Global site tag (gtag.js) - Google Analytics