ホームページ データベース mysql チュートリアル Oracle中去重复记录 不用distinct

Oracle中去重复记录 不用distinct

Jun 07, 2016 pm 05:22 PM
oracle distinct

用distinct关键字只能过滤查询字段中所有记录相同的(记录集相同),而如果要指定一个字段却没有效果,另外distinct关键字会排序

用distinct关键字只能过滤查询字段中所有记录相同的(记录集相同),而如果要指定一个字段却没有效果,另外distinct关键字会排序,效率很低 。

select distinct name from t1 能消除重复记录,但只能取一个字段,现在要同时取id,name这2个字段的值。

select distinct id,name from t1 可以取多个字段,但只能消除这2个字段值全部相同的记录

所以用distinct达不到想要的效果,用group by  可以解决这个问题。

例如要显示的字段为A、B、C三个,而A字段的内容不能重复可以用下面的语句:

select A, min(B),min(C),count(*) from [table] where [条件] group by  A

having [条件] order by A desc

为了显示标题头好看点可以把select A, min(B),min(C),count(*) 换称select A as A, min(B) as B,min(C) as C,count(*) as 重复次数

显示出来的字段和排序字段都要包括在group by 中

但显示出来的字段包有min,max,count,avg,sum等聚合函数时可以不在group by 中

如上句的min(B),min(C),count(*)

一般条件写在where 后面

有聚合函数的条件写在having 后面

如果在上句中having加 count(*)>1  就可以查出记录A的重复次数大于1的记录

如果在上句中having加 count(*)>2  就可以查出记录A的重复次数大于2的记录

如果在上句中having加 count(*)>=1  就可以查出所有的记录,,但重复的只显示一条,并且后面有显示重复的次数----这就是所需要的结果,而且语句可以通过hibernate

下面语句可以查询出那些数据是重复的:

select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) > 1

将上面的>号改为=号就可以查询出没有重复的数据了。

例如 select count(*) from (select gcmc,gkrq,count(*) from gczbxx_zhao t group by gcmc,gkrq having

count(*)>=1 order by GKRQ)

select * from gczbxx_zhao where viewid in ( select max(viewid) from gczbxx_zhao group by

gcmc ) order by gkrq desc ---还是这个可行。

有一面试题说:distinct去重复的效率很底下,我在网上看到这遍文章的方法好像说是用 group by  having  效率很高了?

我在了一个测试,有一商品表,26万条记录,只有商品编号建了索引,对品牌名称字段做 distinct

select brand,count(*) from tab_commbaseinfo  group by brand having count(*) =1

平均时间是:0.453

select distinct brand from tab_commbaseinfo

平均时间是:0.39

搞不懂是否还有其它方法。

linux

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

DockerでのMySQLメモリの使用を減らします DockerでのMySQLメモリの使用を減らします Mar 04, 2025 pm 03:52 PM

DockerでのMySQLメモリの使用を減らします

Alter Tableステートメントを使用してMySQLのテーブルをどのように変更しますか? Alter Tableステートメントを使用してMySQLのテーブルをどのように変更しますか? Mar 19, 2025 pm 03:51 PM

Alter Tableステートメントを使用してMySQLのテーブルをどのように変更しますか?

mysqlの問題を解決する方法共有ライブラリを開くことができません mysqlの問題を解決する方法共有ライブラリを開くことができません Mar 04, 2025 pm 04:01 PM

mysqlの問題を解決する方法共有ライブラリを開くことができません

Linuxでmysqlを実行します(phpmyAdminを使用してポッドマンコンテナを使用して/なし) Linuxでmysqlを実行します(phpmyAdminを使用してポッドマンコンテナを使用して/なし) Mar 04, 2025 pm 03:54 PM

Linuxでmysqlを実行します(phpmyAdminを使用してポッドマンコンテナを使用して/なし)

sqliteとは何ですか?包括的な概要 sqliteとは何ですか?包括的な概要 Mar 04, 2025 pm 03:55 PM

sqliteとは何ですか?包括的な概要

MACOSで複数のMySQLバージョンを実行する:ステップバイステップガイド MACOSで複数のMySQLバージョンを実行する:ステップバイステップガイド Mar 04, 2025 pm 03:49 PM

MACOSで複数のMySQLバージョンを実行する:ステップバイステップガイド

人気のあるMySQL GUIツール(MySQL Workbench、PhpMyAdminなど)は何ですか? 人気のあるMySQL GUIツール(MySQL Workbench、PhpMyAdminなど)は何ですか? Mar 21, 2025 pm 06:28 PM

人気のあるMySQL GUIツール(MySQL Workbench、PhpMyAdminなど)は何ですか?

MySQL接続用のSSL/TLS暗号化を構成するにはどうすればよいですか? MySQL接続用のSSL/TLS暗号化を構成するにはどうすればよいですか? Mar 18, 2025 pm 12:01 PM

MySQL接続用のSSL/TLS暗号化を構成するにはどうすればよいですか?

See all articles