sql小技巧之1 根據投票數實時排序

2021-08-28 22:22:33 字數 929 閱讀 6564

在做投票活動的時候,經常為遇到頁面展示時需要根據投票顯示當前排名情況,通過mysql可以簡單實現該功能。

select

id,user_name,

user_id,

net_ballots,

(@i :=@i + 1) as no

from

vote_user_video_info,

(select @i := 0) as it

order by

net_ballots desc

說明:

id為記錄主鍵

user_name為作者名稱

user_id為作者id

net_ballots為投票數

no為投票排名

後來需求要求有兩種排序方法,一種是按排名顯示列表,另一種是按最近記錄顯示列表並顯示對應記錄的排名。

這樣的話,只要在上面的sql中新增乙個建立時間字段,然後再根據時間排序或者排名排序即可。

select

*from

( select

id,user_name,

user_id,

net_ballots,

audit_time,

(@i :=@i + 1) as order_num

from

vote_user_video_info,

(select @i := 0) as it

order by

net_ballots desc

) as tmp_table

order by

tmp_table.order_num

不過這樣的方法,在資料量很大,並且qps較高的時候效能不是很好,可以採取索引的方法優化,或者實時性要求不高的情況下,可以用定時任務去實現統計,然後供查詢

SQL2008根據日誌恢復

網上收集的一篇文章,忘記是 的了.做個記號.建立測試資料庫 create database dbgo 對資料庫進行備份 backup database db to disk c db.bak with format go 建立測試表 create table db.dbo.tb test id in...

SQL 2008根據條件拆分列

在為人事局做報表過程中,遇到乙個棘手的問題,客戶要求把資料庫中的一列資料根據條件分成多列。比如 資料庫中有省份這麼一列資料 客戶要求根據省份分類,河北省一列 北京市一列 天津市一列,剩下的為其他,目標效果如下 手工編寫的sql語句version1.0版 select 河北 parsename pro...

1356 根據數字二進位制下 1 的數目排序

hello aohy 今天呢做了個決定好好學演算法,嗯,力扣每日打卡,希望你能堅持下去。這是鏈結 看到題目首先想到的就是暴力排序了,但是注意到 大小是有兩個規則 所以簡單點的想法就是計算每個數二進位制表示中1的個數,統計比較輸出就行。然後我去看題解了。然後我知道了sort的重寫規則樣式 這樣的cla...