2017-09-22 71 views
0

我有一個MySQL表像這樣分組排名:由TypeMySQL的 - 計算由兩列

  Tbl 
[Username Number Type] 
    manos  5  A 
    manos  6  B 
    maria  2  A 
    maria  3  B 
    maria  1  C 
    nick  7  A 
    nick  4  C 
    aaron  8  A 

我想創建一個視圖,我將有每個用戶的行列中(通過更大的數字),分組,與每種類型的其他用戶相比較。更具體地講,我想輸出是:

[Username  Rank Type] 
    manos  3  A 
    manos  1  B 
    maria  4  A 
    maria  2  B 
    maria  2  C 
    nick  2  A 
    nick  1  C 
    aaron  1  A 

我曾嘗試以下:

select Username, count(*) as Rank, Type 
from Tbl as aw 
where 
    Number <= (
     select Number 
     from Tbl 
     where Type = aw.Type 
    ) 
group by Username, Type 

的結果是,我得到了Subquery returns more than 1 row錯誤。

任何幫助,將不勝感激!

編輯:改變列建議的名稱。也是一個小提琴幫助:http://sqlfiddle.com/#!9/55ec3f

編輯2:對「所有組合等級」的一些澄清和更正。 比方說,我們有另一個表稱爲Teams

  Teams 
[Username Team] 
    manos  T1 
    manos  T2 
    maria  T1 
    maria  T2 
    nick  T1 
    nick  T2 
    aaron  T3 

在這種情況下,我想提取的組(S)和類型的每個組合行列,即對於馬諾斯我想:

  • 排名針對人與針對型人阿
  • 排名在T2與類型針對人阿
  • 排名在T1與B型
  • 針對人秩T1 T2 B型
  • 針對T1人和T2與式排名針對人在T1和T2甲
  • 等級爲B
+0

好吧,重讀兩遍後,我仍然不明白你是什麼期待在這裏。 :( – Krishnakumar

+0

你有mysql中的第一個表,你必須產生第二個。例如,A組中的所有人都是manos,排名第三。 –

+1

我瞭解隊伍,但我不明白manos爲什麼會優先在結果 – Strawberry

回答

1

對於起見理智,我更名爲你的group列...

SELECT username 
    , user_group 
    , number 
    , CASE WHEN @prev=user_group THEN @i:[email protected]+1 ELSE @i:=1 END rank 
    , @prev:=user_group 
    FROM my_table x 
    , (SELECT @prev:=null, @i:=0) vars 
ORDER 
    BY user_group 
    , number DESC; 
+0

我認爲這樣做的工作:http://sqlfiddle.com/#!9/55ec3f/3 –

+0

謝謝!也許有關於該組合的任何想法? :) –

+0

@ManosTsardoulias恐怕我不明白這方面的問題。 – Strawberry

-1

正確的代碼類型:

select Username, (select Number 
    from Tbl as t 
    where t.Type = aw.Type and t.Username = aw.Username) as Rank, Type from Tbl as aw where 
Number <= (
    select Number 
    from Tbl as t 
    where t.Type = aw.Type and t.Username = aw.Username 
) group by Username, Type 
+0

不幸的是,這會爲所有人返回1,因爲您在內部查詢中的用戶名相同:http://sqlfiddle.com/#!9/55ec3f/1 –

+0

非常抱歉。我糾正了答案。 – Stranger

+0

這有效地將「等級」替換爲「數量」,這又不是我們想要的。 – Strawberry