Django 解决distinct无法去除重复数据的问题
今天需要使用Django查询一列的字段(不含重复),搞了一上午,发现这样的事情:如图:

得到的数据几乎是相等的,没有区别。
但是仔细看会发现:下面的数据比起上面的还是少了一个。
解决办法:
django的distinct在使用之前必须先使用order_by方法排序,如图:

这样就完美解决了这个问题。
补充知识:Distinct和Group by去除重复字段记录
重复记录 有两个意义,一是完全重复的记录,也即所有字段均重复的记录
二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。
1、对于第一种重复,比较容易解决,使用
select distinct * from tableName
就可以得到无重复记录的结果集。
如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除
select distinct * into #Tmp from tableName drop table tableName select * into tableName from #Tmp drop table #Tmp
发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。
2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下
假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集
select identity(int,1,1) as autoID, * into #Tmp from tableName select min(autoID) as autoID into #Tmp2 from #Tmp group by Name select * from #Tmp where autoID in(select autoID from #tmp2)
最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)
其它的数据库可以使用序列,如:
create sequence seq1;
select seq1.nextval as autoID, * into #Tmp from tableName
zuolo: 我根据上面实例得到所需要的语句为 SELECT MAX(id) AS ID,Prodou_id,FinalDye FROM anwell..tblDBDdata GROUP BY Prodou_id,FinalDye ORDER BY id,之前一直想用Distinct来得到指定字段不重复的记录是个误区。
以上这篇Django 解决distinct无法去除重复数据的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。
相关推荐
-
Django models filter筛选条件详解
条件选取querySet的时候,filter表示=,exclude表示!=. querySet.distinct() 去重复 __exact 精确等于 like 'aaa' __iexact 精确等于 忽略大小写 ilike 'aaa' __contains 包含 like '%aaa%' __icontains 包含 忽略大小写 ilike '%aaa%',但是对于sqlite来说,contains的作用效果等同于icontains. __gt 大于 __gte 大于等于 __lt 小于 __
-
python Django批量导入不重复数据
本文为大家分享了python Django批量导入不重复数据的实现代码,供大家参考,具体内容如下 程序如下: #coding:utf-8 import os os.environ.setdefault("DJANGO_SETTINGS_MODULE", "www.settings") ''' Django 版本大于等于1.7的时候,需要加上下面两句 import django django.setup() 否则会抛出错误 django.core.exceptions
-
django 利用Q对象与F对象进行查询的实现
Q对象: 优势:可以实现 与|或|非 组合查询. 给几个小例子就一目了然了: Book.objects.filter(id__gt=2,bread__gt=20) #and关系 Book.objects.filter(Q(bread__gt=20) & Q(id__gt=2)) #and关系 Book.objects.filter(Q(bread__gt=20) | Q(id__gt=2)) #or关系 Book.objects.filter.(~Q(id=3)) # ~表示not,查询编号不等
-
Django 解决distinct无法去除重复数据的问题
今天需要使用Django查询一列的字段(不含重复),搞了一上午,发现这样的事情:如图: 得到的数据几乎是相等的,没有区别. 但是仔细看会发现:下面的数据比起上面的还是少了一个. 解决办法: django的distinct在使用之前必须先使用order_by方法排序,如图: 这样就完美解决了这个问题. 补充知识:Distinct和Group by去除重复字段记录 重复记录 有两个意义,一是完全重复的记录,也即所有字段均重复的记录 二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重
-
MySQL 去除重复数据实例详解
MySQL 去除重复数据实例详解 有两个意义上的重复记录,一是完全重复的记录,也即所有字段均都重复,二是部分字段重复的记录.对于第一种重复,比较容易解决,只需在查询语句中使用distinct关键字去重,几乎所有数据库系统都支持distinct操作.发生这种重复的原因主要是表设计不周,通过给表增加主键或唯一索引列即可避免. select distinct * from t; 对于第二类重复问题,通常要求查询出重复记录中的任一条记录.假设表t有id,name,address三个字段,id是主键,有重
-
JS实现的数组去除重复数据算法小结
本文实例讲述了JS实现的数组去除重复数据算法.分享给大家供大家参考,具体如下: 在JS中经常会遇到去除数组中重复数据的需求,在此介绍四种算法以实现JS数组去重的功能. 1. 速度最快算法:对象键值对法 实现思路:新建一js对象以及新数组,遍历传入数组时,判断值是否为js对象的键,不是的话给对象新增该键并放入新数组. //注意点: 判断 是否为js对象键时,会自动对传入的键执行"toString()",不同的键可能会被误认为一样:例如: a[1].a["1"] .解决
-
java中List去除重复数据的5种方式总结
前言 List 是一个接口,它继承于Collection的接口.它代表着有序的队列.当我们讨论List的时候,一般都和Set作比较. List中元素可以重复,并且是有序的(这里的有序指的是按照放入的顺序进行存储.如按照顺序把1,2,3存入List,那么,从List中遍历出来的顺序也是1,2,3). Set中的元素不可以重复,并且是无序的(从set中遍历出来的数据和放入顺序没有关系). 以下介绍五种-不同的方法去除 Java 中ArrayList中的重复数据 1.使用LinkedHashSet删除
-
oracle数据库去除重复数据常用的方法总结
目录 创建测试数据 针对指定列,查出去重后的结果集 distinct row_number() 针对指定列,查出所有重复的行 count having count over 删除所有重复的行 删除重复数据并保留一条 分析函数法 group by 总结 创建测试数据 create table nayi224_180824(col_1 varchar2(10), col_2 varchar2(10), col_3 varchar2(10)); insert into nayi224_180824 s
-
Angularjs的ng-repeat中去除重复数据的方法
本文实例讲述了Angularjs的ng-repeat中去除重复数据的方法.分享给大家供大家参考,具体如下: 一.JS: ngApp.filter('unique', function () { return function (collection, keyname) { var output = [], keys = []; angular.forEach(collection, function (item) { var key = item[keyname]; if (keys.index
-
Java实现数组去除重复数据的方法详解
本文实例讲述了Java实现数组去除重复数据的方法.分享给大家供大家参考,具体如下: 前一段时间被面试问到:如果一个数组中有重复元素,用什么方法可以去重?一时间会想到用一种方法,但是后来查阅资料后发现,有好多方法可以实现,现在就总结一下,比较简单的几种. 一.用List集合实现 int[] str = {5, 6, 6, 6, 8, 8, 7,4}; List<Integer> list = new ArrayList<Integer>(); for (int i=0; i<s
-
django 解决自定义序列化返回处理数据为null的问题
在接口返回数据时,如果数据库表中查询出来的某些字段为null时,在前端需要多处理一些数据异常的情况. django可以自定义序列化返回处理,将返回的内容限制和预处理再返回到前端. 1.未处理时返回 如图上,有email.mobile这两个字段是有可以为空且默认值为null的. 2.to_representation处理 在模型序列化类增加, to_representation方法,以自定义数据处理限制 from rest_framework import serializers from .mo
-
Java中List集合去除重复数据的方法汇总
List集合概述 List集合是一个元素有序(每个元素都有对应的顺序索引,第一个元素索引为0).且可重复的集合. List集合常用方法 List是Collection接口的子接口,拥有Collection所有方法外,还有一些对索引操作的方法. void add(int index, E element);:将元素element插入到List集合的index处: boolean addAll(int index, Collection<? extends E> c);:将集合c所有的元素都插入到
-
Oracle去除重复数据
查询某些字段相同的记录 如:查询col1与col2值相同的记录: select a.* from table1 a, table1 b where a.id <> b.id and a.col1 = b.col1 and a.col2 = b.col2; 一.用rowid方法: 根据oracle自带的rowid属性进行判断是否存在重复记录. rowid伪列用于唯一标识物理位置的表行,当用insert插入数据时,会自动生成rowid,与数据一起存放,形如:AAAL=XAAAEAAAAA. 1.查
随机推荐
- 修改Windows Server 2008 R2 的3389远程端口的Bat批处理代码
- AngularJS中的过滤器filter用法完全解析
- HTML5附件拖拽上传drop & google.gears实现代码
- Java根据模板导出Excel报表并复制模板生成多个Sheet页
- 简单了解Java编程中线程的创建与守护线程
- PHP注释实例技巧
- 使用vue与jquery实时监听用户输入状态的操作代码
- 基于PHP一些十分严重的缺陷详解
- 详解Python多线程
- 用内置变量调试shell脚本的方法
- 基于JSP实现一个简单计算器的方法
- 从键盘磨损度看一个人的分析
- 浅谈javascript的Array.prototype.slice.call
- jquery操作checked属性以及disabled属性的多种方法
- IIS下调用证书出现异常的解决方法 (C#)
- maven中下载jar包源码和javadoc的命令介绍
- Android自定义控件之自定义组合控件(三)
- C#实现读取注册表监控当前操作系统已安装软件变化的方法
- Android 监听网络状态方法详解
- Python将一个Excel拆分为多个Excel
