有 2 張表,user 表和 action 表。
user 表的結構是這樣的。
id user_name alias
at8c zhangsan 張三
cfy6 lisi 李四
d1yt wangwu 王五
dt9p zhaoliu 趙六
...
action 表的結構是這樣的。
user_id event date
at8c 登入 2020-08-01 18:52:23.46
at8c 注銷 2020-08-01 20:52:23.46
cfy6 登入 2020-08-02 18:52:23.46
cfy6 注銷 2020-08-01 20:52:23.46
d1yt 登入 2020-09-03 18:52:23.46
d1yt 注銷 2020-09-03 20:52:23.46
...
比如,我現在想查 8月份,每個用戶登入了多少次,如何查詢呢?
我想要這樣的查詢結果
序號 賬號 姓名 登入次數
1 zhangsan 張三 25
2 lisi 李四 19
3 wangwu 王五 17
4 zhaoliu 趙六 0
5 qianqi 錢七 0
...
我想要的這個結果有幾個疑問,第一個疑問,原來的表里邊是沒有序號的,查詢出來的結果中需要增加這個序號,方便查看賬號的數量;第二個問題,這個登入次數是倒序排列的,登入最頻繁的人在上邊,如果某個用戶沒有登入過的話比如趙六正常情況下登入次數那里應該是空的,沒有內容,但是這里希望沒有登入過的也顯示出0。
要使用什么樣的陳述句才能得到我想要的結果呢?
uj5u.com熱心網友回復:
select (@n:=@n+1) 序號, u.user_name 帳號, u.alias 姓名, count(1) 登入次數 from user uleft join action a on u.id = a.user_id and date_format(a.date, '%Y%m') = '202008'
inner join (select @n:=0) r
group by u.id,u.user_name,u.alias
盲寫的sql,沒測過,你試試可不可以用。排序可以在最后加個order by試試,不行就把上面的陳述句外面再加一層臨時表再去order by
uj5u.com熱心網友回復:
select (@n:=@n+1) 序號, u.user_name 帳號, u.alias 姓名, count(1) 登入次數 from user u
left join action a on u.id = a.user_id and date_format(a.date, '%Y%m') = '202008'
inner join (select @n:=0) r
group by u.id,u.user_name,u.alias
order by count(1) desc
uj5u.com熱心網友回復:
sorry,是我記錯了,這資料庫不是 mysql 是 sqlserver,所以執行你的這條陳述句的時候產生了如下錯誤:
[42000] [Microsoft][SQL Server Native Client 11.0][SQL Server]必須宣告標量變數 "@n"。 (137)
[42000] [Microsoft][SQL Server Native Client 11.0][SQL Server]':' 附近有語法錯誤。 (102)
你對 sqlserver 了解嗎?在 sqlserver 中應該如何實作呢?
uj5u.com熱心網友回復:
我沒sqlserver,你自己把(@n:=@n+1) 序號和inner join (select @n:=0) r去掉,改成sqlserver序號列的函式就ok轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/7134.html
標籤:MySQL
