資料測試表
表名test
需求:這是一張店鋪的虛擬表,id為店鋪id,user_id為該店鋪的發展人,現需要對user_id進行分組查詢每個user下共有多少家店鋪,並對這個資料進行排名
思路:有點類似迴圈裡面的自增一樣,設定乙個變數並賦予初始值,迴圈一次自增加1,從而實現排序;
mysql裡則是需要先將資料查詢出來並先行按照需要排序的字段做好降序desc,或則公升序asc,設定好排序的變數(初始值為0):
a>.將已經排序好的資料從第一條依次取出來,取一條就自增加一,實現從1到最後的乙個排名
b>.當出現相同的資料時,排名保持不變,此時則需要再設定乙個變數,用來記錄上一條資料的值,跟當前資料的值進行對比,如果相同,則排名不變,不相同則排名自增加1
c.當出現相同的資料時,排名保持不變,但是保持不變的排名依舊會占用乙個位置,也就是類似於(1,2,2,2,5)這種排名就是屬於中間的三個排名是一樣的,但是第五個排名按照上面一種情況是(1,2,2,2,3),現在則是排名相同也會佔據排名的位置
首先,我們先要把進行排名前的資料查詢出來,這很簡單
[sql]
view plain
copy
"font-size:18px;"
>
select
user_id,
count
(*)
asquantity
from
test
group
byuser_id
order
byquantity
結果如下:
下面,就需要對上面的資料進行排名了
現在有三種排序方法,依次來舉例
一、不管資料相同與否,排名依次排序(1,2,3,4,5,6,7.....)
[sql]
view plain
copy
select
a.user_id,
a.quantity,
@rownum := @rownum + 1 as
rank
from
( select
user_id,
count
(*)
asquantity
from
test
group
byuser_id
order
byquantity
) as
a,
(select
@rownum := 0) r
結果如下:
這樣子算是排序完成了,但是還會有乙個缺點,拿上面資料來說,前兩條和最後兩條資料的quantity值相等,誰在前誰在後就不好說了,所以有了下面的方法
二、只要資料有相同的排名就一樣,排名依次排序(1,2,2,3,3,4,5.....)
[sql]
view plain
copy
select
a.user_id,
a.quantity,
case
when
@rowtotal = a.quantity
then
@rownum
when
@rowtotal := a.quantity
then
@rownum :=@rownum + 1
when
@rowtotal = 0
then
@rownum :=@rownum + 1
endas
rank
from
( select
user_id,
count
(*)
asquantity
from
test
group
byuser_id
order
byquantity
) as
a,
(select
@rownum := 0 ,@rowtotal :=
null
) r
這時候就新增加了乙個變數,用於記錄上一條資料的記錄了,只要當前資料記錄跟上一條資料的記錄比較,相同數量的排名就不變,不相同數量的排名就加一,並且更新變數的分數值為該條資料的分數,依次比較
結果如下:
如果你需要數量相同的排名也相同,但是後面的排名不能受到數量相同排名相同而不佔位的影響,也就是哪怕你排名相同,你也佔了這個位置(比如:1,2,2,4,5,5,7....這種形式的,雖然排名有相同,但是你佔位了,後續的排名根據佔位來排)於是
三、只要資料有相同的排名就一樣,但是相同排名也佔位,排名依次排序(1,2,2,4,5,5,7.....)
[sql]
view plain
copy
select
new.user_id,
new.quantity,
new.rank
from
( select
a.user_id,
a.quantity,
@rownum := @rownum + 1 as
num_tmp,
@incrnum := case
when
@rowtotal = a.quantity
then
@incrnum
when
@rowtotal := a.quantity
then
@rownum
endas
rank
from
( select
user_id,
count
(*)
asquantity
from
test
group
byuser_id
order
byquantity
) as
a,
( select
@rownum := 0 ,@rowtotal := null
,@incrnum := 0
) r
) as
new
結果如下:
方法介紹完了,最後把三個排序結果放在一起對比一下
Mysql 將資料進行備份與還原
二 還原資料庫 1.資料的介紹 在運算元據庫時,難免會發生一些意外造成資料丟失。例如,突然停電 管理員的操作失誤都可能導致資料的丟失。為了確保資料的安全,需要定期對資料庫進行備份,這樣,當遇到資料庫中資料丟失或者出錯的情況,就可以將資料進行懷原,從而最大限度地降低損失。這段話是課本上說的,而我想說特...
MySQL 對JSON資料進行查詢
注意 用json型別的話 1 json列儲存的必須是json格式資料,否則會報錯。2 json資料型別是沒有預設值的。1 首先我們看到資料表中,form value 一列是josn格式存在的,又想通過其中的一組或者幾組鍵值對來進行查詢。2 通過以下語句就可以通過key,value來進行查詢了,如果多...
使用python將mysql的查詢資料匯出到檔案
mysql官方提供了很多種connector,其中包括python的connector。直接安裝即可。在python中 1.連線 import mysql.connector cnx mysql.connector.connect user scott password tiger host 127...