1. 程式人生 > >mysql distinct 去重(轉載)

mysql distinct 去重(轉載)

在使用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;

相關推薦

mysql distinct 轉載

在使用mysql時,有時需要查詢出某個欄位不重複的記錄,雖然mysql提供 有distinct這個關鍵字來過濾掉多餘的重複記錄只保留一條,但往往只用它來返回不重複記錄的條數,而不是用它來返回不重記錄的所有值。其原因是 distinct只能返回它的目標欄位,而無法返回其它欄位

Dstream[Row] 資料批量匯入Mysql大致為如果資料庫中有某行資料了,本次執行若有一行與資料庫中的那行相同,則不會再插入進去

def Save2Mysql(stateDStream: DStream[Row]): Unit = { stateDStream.foreachRDD { rdd => { rdd.foreachPartition(partitionRecord

Java8 list根據一個欄位記錄

list = list.stream().collect( Collectors.collectingAndThen( Collectors.toCollection(() -> new TreeSet&l

mysql sql語句大全轉載

原文地址:https://www.cnblogs.com/bchjazh/p/5997728.html 1、說明:建立資料庫 CREATE DATABASE database-name 2、說明:刪除資料庫 drop database dbname 3、說明:備份sql server --- 建立

原生JS--兩種方法去掉重複字元

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

移除陣列中的重複元素-列表Python

給定一個升序排列的陣列,去掉重複的數,並輸出新的陣列的長度。 例如:陣列 A={1,1,2},你的程式應該輸出 2 即新陣列的長度,新陣列為 {1,2}。 要求:不能新開陣列分配額外的空間,即常數空間限制。 輸入格式 輸入一個整數 n(1≤n≤1000)。 接下來一

Java中List集合

關於List中物件去重,如果List中儲存的資料型別是基本資料型別,可直接將list集合轉換成set集合,或採用其他方法,上篇有陳述。本篇說下list集合中的資料型別是一個物件型別的情況,需要在物件的實體類中去重寫equals()方法和hashCode()方法。 在該例

一行代碼實現數組ES6

query 都是 add params log for reac arr UNC ES6中新增了Set數據結構,類似於數組,但是 它的成員都是唯一的 ,其構造函數可以接受一個數組作為參數,如: let array = [1, 1, 1, 1, 2, 3, 4, 4,

Navicat for MySQL 安裝和破解轉載

Navicat工具使用方便,但需要破解。 1、安裝Navicat軟體 安裝成功之後進行破解。 然後選擇剛剛安裝的Navicat安裝路徑下找到navicat.exe檔案,點選選擇即可啟用 成功。 可以使用啦! Navicat for MySQL

陣列JS

(棧型別) 原始值:boolen,num,string,null,undefined (堆型別) 引用值:object,array 首先重新定義一個type()函式, <script> function type(target){ var ret = typeof(targ

資料庫查詢結果distinct與group by

一般情況下,資料庫去重複有以下那麼三種方法:第一種:  兩條記錄或者多條記錄的每一個欄位值完全相同,這種情況去重複最簡單,用關鍵字distinct就可以去掉。例:1SELECT DISTINCT * FROM TABLE第二種:  兩條記錄之間之後只有部分欄位的值是有重複的,

C#黔驢技巧之Distinct

前言 關於C#中預設的Distinct方法在什麼情況下才能去重,這個就不用我再多講,針對集合物件去重預設實現將不再滿足,於是乎我們需要自定義實現來解決這個問題,接下來我們詳細講解幾種常見去重方案,孰好孰歹自行判之。 分組 首先給出我們需要用到的物件,如下: public class Person {

Linux下安裝Python3的django並配置mysql作為django默認數據庫轉載

make lba del log pri ica www src rim 我的操作系統為centos6.5 1 首先選擇django要使用什麽數據庫。django1.10默認數據庫為sqlite3,本人想使用mysql數據庫,但為了測試方便順便要安裝一下sqlite開發

CSV文件導入Mysql出現的亂碼等問題 轉載

一行 varchar data 找到 fma 命令 數據 格式 oca 將*.csv文件導入mysql可使用LOAD DATA INFILE, 概要寫法: Load data in file 具體語法使用可參照:http://dev.mysql.com/doc/ref

Linux下MySQL的安裝和啟動轉載

enable linu char cal mysql用戶 客戶端程序 ast 初學 unix 原文鏈接:http://www.linuxidc.com/Linux/2016-07/133234.htm 一、MySQL各類安裝方法的比較 在Linux系統下,MySQL有3種主

[轉抄]oracle單表查詢效率比較高的一種方式

sel select 單表查詢 效率 查詢 rownum 說明 acl 分組 1 select 2 * 3 from 4 ( 5 select 6 a.*, rownum r_n 7

elastic search6.2.2 實現用戶搜索記錄查詢、排序

replicas pos 結果 etime rep col cas rms idt elastic search6.2.2 實現搜索記錄查詢 ,類似新浪微博這種,同樣的搜索記錄後面時間點的會覆蓋前面的(主要思路:關鍵詞去重,然後按時間排序) 先創建索引 //我的搜索

mysql數據庫中關於內連接、外鏈接中on where having的用法。轉載

cell 顯示 null align 工作 orm 最終 mysql 表數據 SQL中on條件與where條件的區別 數據庫在通過連接兩張或多張表來返回記錄時,都會生成一張中間的臨時表,然後再將這張臨時表返回給用戶。 在使用left jion時

js算法初窺03簡單搜索及算法

二分搜索 href map 能力 target 新增 一起學 第一次 ==   前面我們了解了一些常用的排序算法,那麽這篇文章我們來看看搜索算法的一些簡單實現,我們先來介紹一個我們在實際工作中一定用到過的搜索算法——順序搜索。 1、順序搜索   其實順序搜索十分簡單,我們還

通過JDBC進行簡單的增刪改查MySQL為例轉載

IE trac archive solver ttl 賦值 TP 定義 for 轉載:https://www.cnblogs.com/wuyuegb2312/p/3872607.html 目錄 前言:什麽是JDBC 一、準備工作(一):MySQL安裝配置和基礎學習 二、準備