1. 程式人生 > >mysql去重的最方便的兩種方法

mysql去重的最方便的兩種方法

參考資料:http://blog.csdn.net/guocuifang655/article/details/3993612

方法一:

在使用mysql時,有時需要查詢出某個欄位不重複的記錄,雖然mysql提供 有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條件裡?能,照樣報錯。。。。。。。

最終好用的語句如下:

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

結果:

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

最後一項是多餘的,不用管就行了,目的達到。。。。。

哦,對,再順便說一句,group by 必須放在 order by 和 limit之前,不然會報錯。。。。。。。。!OK了

總結語句:select *, count(distinct name) from (select * from table……等巢狀語句) group by name

方法二:

利用group by

  1. SELECT * FROM(  
  2. select * from customer where user=(  
  3.     SELECT source_user from customer WHERE user='admin') UNION ALL select * from customer where user=(  
  4.     select source_user from customer where user=(  
  5.         SELECT source_user from customer WHERE user='admin')) union ALL select * from customer where user=(  
  6.     select source_user from customer where user=(  
  7.         select source_user from customer where user=(  
  8.             SELECT source_user from customer WHERE user='admin'))) UNION ALL select * from customer where source_user=(/*我的上線的上線的user*/  
  9.     select user from customer where user=(  
  10.         select source_user from customer where user=(  
  11.             SELECT source_user from customer WHERE user='admin'))) union all select * from customer where source_user=(/*我的上線的上線的上線user*/  
  12.     select user from customer where user=(  
  13.     select source_user from customer where user=(  
  14.         select source_user from customer where user=(  
  15.             SELECT source_user from customer WHERE user='admin'))))) as alias group by user;  

注意加別名,不然報錯,注意在where語句外面包裝一下,再用group by去重才會生效。

相關推薦

陣列簡單方法

 在學習es6的過程中發現Set建構函式,接受一個數組型別的引數可以去除重複值,不廢話直接上最簡單的程式碼 var array=[1,2,3,4,5,6,2,2,2,2,3,3,3] console.log([...new Set(array)]) 順便提一下以前使

MYSQL 事務處理常見有方法

直接 操作 mysql www. 數據庫引擎 大量 .com 比較 lba MYSQL在操作大量的數據或者比較重要的數據的時候,事務處理很重要,比如銀行的轉賬,支付,等等,作為開發人員事務是必須的一步。 1、用 BEGIN, ROLLBACK, COM

python 列表(陣列)的幾方法

一、方法1  程式碼如下 複製程式碼 ids = [1,2,3,3,4,2,3,4,5,6,1] news_ids = [] for id in ids:     if id not in news_ids:         n

JavaScript陣列—ES6的方式

說明 JavaScript陣列去重這個問題,經常出現在面試題中,以前也寫過一篇陣列去重的文章,(JavaScript 陣列去重的多種方法原理詳解)但感覺程式碼還是有點不夠簡單,今天和大家再說兩種方法,程式碼可是足夠的少了。 解釋 方法一: function un

apache+php完美解決301定向的方法

<?php $the_host = $_SERVER['HTTP_HOST']; $request_uri = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : ''; switch ($the_host) { case "www.

Mysql讀寫分離的方法對比:Spring+JPA應用層實現 vs Amoeba中介軟體實現

前段時間看了篇文章,講Youku網資料庫架構的演變,如何從最開始的讀寫分離,再到垂直分割槽,最後到水平分片,一步一步慢慢成熟的。看完之後很有衝動抽出一個模型來把這幾種技術都實現一下。      說幹就幹,首先是讀寫分離了,我使用的資料庫是Mysql,主從資料複製用的是半

mysql方便方法

參考資料:http://blog.csdn.net/guocuifang655/article/details/3993612 方法一: 在使用mysql時,有時需要查詢出某個欄位不重複的記錄,雖然mysql提供 有distinct這個關鍵字來過濾掉多餘的重複記錄只保留一條,

js數組方法

遍歷 方法 doc 思路 i++ 代碼 數組去重 -- length 數組去重這種問題經常會遇到,解決方法也有很多,這裏就總結兩種比較常用的方法。 方法一 第一種方法的思路:遍歷數組裏的元素,由第一個元素開始依次按照順序與其後面的元素相比較,如果不同則不

MySQL單實例置密碼的方法

mysql單實例重置密碼的兩種方法MySQL單實例重置密碼的兩種方法在工作學習中,我們有時會忘記數據庫的密碼,下面是MySQL單實例密碼重置的步驟。說明:(1)[[email protected]/* */ ~]# cat /etc/redhat-releaseCentOS release 6.7

原生JS(一)--方法去掉重複字元

所謂“去重”,即是去掉重複的字元。本篇部落格講述兩種方式去重,一種是比較簡單但程式碼比較囉嗦點的,另一種是有點深度但是簡潔的。  我直接寫JavaScript程式碼了。  方式一: function deleteRepetionChar(arr){ //先判斷輸入進

Oracle listagg方法

一:SELECT DISTINCT TYPE, SUBTYPE, LISTAGG (EN, ' | ') WITHIN GROUP (ORDER BY EN) OVER (PARTITION BY TYPE, SUBTYPE) AS SKILLS FROM (S

使用MySql,置root使用者密碼的方法

方法一: 修改my.ini重啟服務的方法: 在my.ini的[mysqld]欄位加入: skip-grant-tables 重啟mysql服務,這時的mysql不需要密碼即可登入資料庫 然後進入mysql mysql>use mysql; mysql>更新

連結串列操作-方法的實現

#include<stdio.h> #include<stdlib.h> typedef struct list { int data; list *next;

每日一python(3):python 中對list方法

在python相關職位的面試過程中,會對列表list的去重進行考察。(注意有時會要求保證去重的順序性) 方法1:直觀方法 思路:先建立一個新的空列表,通過遍歷原來的列表,再利用邏輯關係not in 來去重 程式碼: #coding:utf-8 ll = [

陣列方法

<!DOCTYPE html> <html>     <head>         <meta charset="UTF-8">         <title></title>     </head

Java List方法

通過Iterator遍歷,利用remove方法移除: public void testList() {    List<Integer> list=new ArrayList<Int

對陣列 [3, 1, 2, 4, 2, 4, 5, 3, 7] 進行, 寫出至少方法 (請寫出一段Python程式碼實現刪除一個list裡面的重複元素)

1. 對陣列 [3, 1, 2, 4, 2, 4, 5, 3, 7] 進行去重, 寫出至少兩種方法 (請寫出一段Python程式碼實現刪除一個list裡面的重複元素)In [1]:def unique1

鏈表有環判斷,快慢指針方法/合並鏈表/刪除復元素/二分遞歸和while

pan 快慢指針 fast public nbsp else pre log clas public static boolean hasCycle(ListNode head) { if (head == null || head.next ==

線性小二乘方法

梯度下降 神經網絡 log des sum 直線 ini 結束 erro 線性最小二乘擬合 y = w0 +w1x (參數 w0, w1) (1)如何評價一條擬合好的直線 y = w0 +w1x 的誤差?   "cost" of a given line : Res

MySQL關閉查詢緩存(QC)的方法

from com 技術分享 兩種 查詢 data- 命中 sql語句 count MySQL Query Cache 會緩存select 查詢,安裝時默認是開啟的,但是如果對表進行INSERT, UPDATE, DELETE, TRUNCATE, ALTER TABLE,