昨天有個(gè)需求對(duì)數(shù)據(jù)庫的數(shù)據(jù)進(jìn)行去重排名,同一用戶去成績最高,時(shí)間最短,參與活動(dòng)最早的一條數(shù)據(jù)進(jìn)行排序。我們可以利用MySQL中的group by的特性。
MySQL的group by與Oracle有所不同,查詢得字段可以不用寫聚合函數(shù),查詢結(jié)果取得是每一組的第一行記錄。
利用上面的特點(diǎn),可以利用mysql實(shí)現(xiàn)一種獨(dú)特的排序;
首先先按某個(gè)字段進(jìn)行order by,然后把有順序的表進(jìn)行分組,這樣每組的成員都是有順序的,而mysql默認(rèn)取得分組的第一行。從而得到每組的最值。
select id, (@rowno := @rowno + 1) as rank,
score,
(C.end_time - C.start_time) as timeConsuming,
start_time,
real_name,
tel,
expiry_code
from (SELECT *
FROM (select *
from t_q_order B
where B.score > 0
and B.tel IS NOT NULL
order by B.score desc,
(B.end_time - B.start_time) asc,
B.start_time asc) as A
group by A.tel
ORDER BY A.score desc,
(A.end_time - A.start_time) asc,
A.start_time asc)
as C,
(select @rowno := 0) t
where (C.end_time - C.start_time) > 5 limit 0,50;
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:- Mysql中的排序規(guī)則utf8_unicode_ci、utf8_general_ci的區(qū)別總結(jié)
- 讓MySQL支持中文排序的實(shí)現(xiàn)方法
- mysql如何根據(jù)漢字首字母排序
- Mysql row number()排序函數(shù)的用法和注意
- Mysql select in 按id排序?qū)崿F(xiàn)方法
- 兩種mysql對(duì)自增id重新從1排序的方法
- 數(shù)據(jù)庫查詢排序使用隨機(jī)排序結(jié)果示例(Oracle/MySQL/MS SQL Server)
- MySQL中按照多字段排序及問題解決
- MySQL查詢優(yōu)化:連接查詢排序limit(join、order by、limit語句)介紹
- MySQL中一些鮮為人知的排序方式