MySQL查詢總積分前十的使用者資訊和總分

2021-08-07 15:59:17 字數 2649 閱讀 6432

這是前天看見的乙個面試題。

在這裡有兩個表,乙個使用者表和乙個使用者積分記錄表。

找到總積分前10的使用者和使用者資訊

使用者表和積分記錄表,唯一的聯絡就是會員uid。

使用者表

積分記錄表

結果

這裡用到了sum()求和函式和group分組。

需求是求前10的,這裡資料量沒那麼大就求前5把,既然是前5,我們就降序排列。這裡就要使用mysql排序了。

使用 order by 子句將查詢資料排序後再返回;

asc:公升序(預設)

desc :降序。

根據總積分排序,那麼我需要使用求和後的總積分了。

這裡總積分有了,排序也有了。剩下的是找到總積分排序中的前5個。

需要使用mysql的limit了。

limit子句接受乙個或兩個引數。兩個引數的值必須為零或正整數。

offset:引數指定要返回的第一行的偏移量。第一行的偏移量為0,而不是1。

count:指定要返回的最大行數。

但是limit 0,countlimit count是一樣的結果,取表中的前count行。

這裡我們就取到了積分表中總積分前5的了,但是還不知道使用者資訊。

這裡我們希望是通過前面找到的總分前5的uid來找使用者資訊,然後把結果拼接在一起輸出。既然是兩個表的結果拼接就需要left join。那麼sql語句就是這樣的了:

這裡其實我們已經找到了總分前5的人的資訊了。但是結果似乎有點問題。

這裡我們先看看上面的sql語句的邏輯:

1.根據使用者uid求使用者總積分;

2.根據總積分按照降序排列;

3.取上面獲得的資料中的前5個;

4.根據上面的結果去使用者表查詢,結果做鏈結在一起輸出。

這個過程似乎沒任何問題,但是實際的查詢結果卻輸出了下面那些null我們不需要的資料。但是這裡為什麼?我也不知道原因。

解決問題就只能換個思路了。

先對使用者積分表排序排序,然後找根據這個結果去使用者表找,最後的結果在輸出前5條。

這樣就好了。

// 修改字段型別

alter

table usertb modify column uid(欄位名) text(字段型別);

// 修改欄位名

alter table scoretb change name(原欄位名)

score(目標欄位名)

text(字段型別);

分組查詢各省份的前十條記錄

select from select mu.row number over partition by mu.prov code order by mu.prov code rn from mvno user mu where rn 2 在使用 row number over 函式時候,over 裡頭...

mysql查詢優化 未優化前的效果

兩個表,test和test2 test中100萬條資料,欄位有id,networkid等 test2中有1200萬資料,欄位有testid,code等。主鍵為bigint,沒有索引 1 分開查詢 語句 select id from test2 where code def7414551 耗時 15....

mysql指令碼查詢使用者 顯示Mysql中的所有使用者

在mysql中如何顯示所有使用者?1 show databases顯示所有資料庫 2 show tables顯示所有資料表 3 select current user 顯示當前使用者 4 顯示所有使用者 1.登入資料庫 首先,你需要使用如下命令登入到資料庫,注意,必須是root使用者哦 mysql ...