mysql去重的最方便的兩種方法
方法一:
在使用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
- SELECT * FROM(
- select * from customer where user=(
- SELECT source_user from customer WHERE user='admin') UNION ALL select * from customer where user=(
- select source_user from customer where user=(
- SELECT source_user from customer WHERE user='admin')) union ALL select * from customer where user=(
- select source_user from customer where user=(
- select source_user from customer where user=(
- SELECT source_user from customer WHERE user='admin'))) UNION ALL select * from customer where source_user=(/*我的上線的上線的user*/
- select user from customer where user=(
- select source_user from customer where user=(
- SELECT source_user from customer WHERE user='admin'))) union all select * from customer where source_user=(/*我的上線的上線的上線user*/
- select user from customer where user=(
- select source_user from customer where user=(
- select source_user from customer where user=(
- 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,