在使用mysql的select distinct name from table語句時,輸出的只是去重之後name欄位的資訊,而希望的是能夠輸出考生id、考試時間、考試成績等的資訊。使用?
1
select distinct name, sorce from table
結果發現去重不起作用,因為mysql認為要sorce和name同時重複才會去除。 最終解決辦法如下:?
1
select *,
count
(distinct name) from table group by name
如果sql語句還有limit,order by等條件,必須放在group by後面。 這樣就達到了既去重,又能夠輸出更多字段資訊的目的.
select語句,去除某個欄位的重複資訊,例如:
表名:table
id uid username message dateline
1 6 a 111 1284240714(時間戳)
2 6 a 222 1268840565
3 8 b 444 1266724527
4 9 c 555 1266723391
執行語句(去除username欄位重複資訊並按時間排序):
select *from table a inner join ( select max( dateline ) as dateline
from table group by uid ) b on a.dateline = b.dateline
group by id order by a.dateline desc
結果:
id uid username message dateline
1 6 a 111 1284240714(時間戳)
3 8 b 444 1266724527
4 9 c 555 1266723391
此語句用於顯示最新記錄資訊,在乙個區域內不允許某個資訊(例如:使用者)同時出現多次(一次以上)。
後記:效率問題
開始用了個這語句:
select * from table where dateline in ( select max(dateline) from table group by uid ) order by dateline desc
in:當處理資料量比較大的時候,就沒效率可言了,所以優化成內聯,計算下快了6倍多。。。
繼續條效率就加索引了~~
mysql去重欄位 mysql多字段去重,並計數
問 題 mysql版本5.5.42 有兩個表,表結構與資料如下 1 goods表 create table goods id int 10 unsigned not null,product varchar 180 collate utf8mb4 unicode ci not null,size v...
mysql 去重 根據id 資料庫根據指定欄位去重
需求 對一張使用者表根據name email card num欄位去除重複資料 思路 用group by方法可以查詢出 去重 後的資料,將這些資料儲存到一張臨時表中,然後將臨時表的資料儲存到指定的表中 誤區及解決方案 group by方法只能獲取部分字段 去重指定字段 不能一次獲取到完整的資料,但是...
mysql根據多個欄位去重
現在在搞資料處理,裡面有個資料是根據兩個欄位來區別是不是一樣的,那如果在設計的時候沒有將那兩個字段設計成唯一主鍵,或者唯一索引,後續就要進行去重,上網查了好久,發現都沒有啥好的解決方法,後來想了下,將那兩個主鍵連線一下,然後group分組不就行了?雖然效能很弱雞,但是這個sql我又只是用一次而已。s...