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 关键字时,SELECT 语句中只能显示 DISTINCT 指定的字段,其他字段将被忽略。例如: ``` SELECT DISTINCT name, remark FROM A; ``` 这条语句将返回错误,因为 DISTINCT 关键字只能作用于 name 字段...
根据提供的信息,我们可以了解到本文档主要探讨了在SQL Server中如何进行动态字段查询的问题,尤其关注于处理非标准数据格式的情况。文档中的示例代码显示了如何在一个包含混合类型(如字符串和数值)的表中执行查询...
解决MaxCompute SQL count distinct多个字段的方法按照惯性思维,统计一个字段去重后的条数我们的sql写起来如下:Distinct的作用
在 SQL 中,`DISTINCT` 必须放置在 `SELECT` 语句的最前面,不能单独应用于某一个字段。如果想要获取 `name` 的唯一值以及对应的 `id`,可以使用子查询或者窗口函数来实现: ```sql SELECT id, name FROM ( SELECT...
MySQL通常使用GROUPBY(本质上是排序动作)完成DISTINCT操作,如果DISTINCT操作和ORDERBY操作组合使用,通常会用到临时表.这样会影响性能. 在一些情况下,MySQL可以使用索引优化DISTINCT操作,但需要活学活用.本文涉及一个...
在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是...
上述场景中,用户遇到了一个问题:对一个10G以上的单表`user_access_xx_xx`执行`SELECT COUNT(DISTINCT nick)`以统计唯一用户访问(UV)时,即使有`nick`字段的索引,执行计划仍然显示全索引扫描,导致服务器性能受...
当我们需要从一个表中获取唯一的某一列的值时,可以使用`DISTINCT`关键字。例如,在表A中,如果我们只想看到所有不重复的名字,我们可以编写如下SQL语句: ```sql SELECT DISTINCT name FROM A; ``` 这将返回一...
在SQL Server中,有时我们需要将某个表字段中的多个数据项合并为一个字符串,这通常用于生成报告、拼接查询条件或其他需要数据集合作为单一文本的情况。本篇将详细讲解如何使用一条SQL语句实现这一功能。 首先,...
在SQL Server中,有时我们需要对某个字段的值进行合并,特别是在数据分析或报表生成时,这种情况很常见。本实例探讨了如何在SQL Server中合并特定字段的值,特别是针对相同ID的记录。我们将通过一个实际的例子来理解...
7. **Exists/In/Any/All/Contains**:这些谓词用于检查条件的存在性,如 `Exists` 检查是否存在满足条件的记录,`In` 检查某个值是否在列表中等。 8. **Concat/Union/Intersect/Except**:集合操作符,用于合并(`...
`Distinct()`方法默认只考虑单个字段。为了根据多个字段进行去重,你需要创建一个匿名类型来包含这两个字段,并使用这个匿名类型的等价关系进行去重。例如,如果我们有两个字段`field1`和`field2`,可以这样做: ``...
使用`DISTINCT`时,`SELECT`语句中显示的字段仅限于`DISTINCT`指定的列。如果你还需要显示其他列的数据,比如在`DISTINCT name`的同时展示`备注`列的内容,直接使用`DISTINCT`是无法实现的。这时,你可以考虑使用子...
根据提供的信息,本文将详细介绍如何在Oracle数据库中将某个字段的多行记录转换为一行记录的方法。这种方法在处理大量数据时非常有用,特别是在需要将多个值汇总到一个字段中的场景下。 ### 标题理解:“oracle某个...
SELECT DISTINCT 字段名 FROM 数据表; ``` 2. **计数查询**: `COUNT(*)`函数可以计算表中的记录数。如果要按特定字段计数,可以这样做: ```sql SELECT COUNT(*) FROM 数据表 WHERE 字段名1 BETWEEN #日期1# ...
本文将详细介绍如何使用SQL语句来查询表中的重复数据,并基于提供的SQL示例进行深入分析。 ### SQL查询重复数据的核心概念 在开始之前,我们需要了解几个关键的概念: 1. **重复数据**:指的是在数据表中存在多条...
SQL Server 删除重复数据 SQL Server 删除重复数据是数据库管理中的一项重要任务。重复数据可能是完全重复的记录,也可能是部分关键字段重复的记录。删除重复数据可以使用多种方法,包括使用 SELECT DISTINCT 语句...