2014-02-16 84 views
0

假設我有我的數據庫中以下情況:
的第一個元素是用戶ID,第二個是一些數據,它的最後關口。排序在SQL通過比較法

1-1-1 
1-2-2 
1-3-4 

2-4-1 
2-2-1 

3-1-5 
3-3-1 
3-2-5 

4-2-2 
4-1-1 

5-4-1 
5-6-2 

我該怎麼做某種以及將由標記,如果數據是在用戶的另一個ID進行排序SQL查詢ID返回。
例如:如果我比較具有ID 1與其他用戶的數據,它必須返回以下:

4-2-2 
4-1-1 

2-4-1 
2-2-1 

3-1-5 
3-3-1 
3-2-5 

這樣的排序將在順序返回數據:4,2,3

然後分類! 我想更詳細地說: 見,請:

1-1-1 
1-2-9 
1-4-2 

2-1-5 
2-2-2 
2-5-4 

3-1-3 
3-3-3 
3-2-8 
3-4-6 
3-6-10 

============= ============= 1 = ============= ==============
第二位用戶:
1:(10-1) - (10-5) =(4)= 4; 2:(10-9) - (10-2)= ABS(-7)= 7;(10-9)
3:下一個數據用戶1中的內容 - 用戶2中不存在,我們可以輕鬆傳遞它;

具有第三ID的用戶:
1:(10-1) - (10-3)=(2)= 2;
2:用戶使用3rt id時,下一個數據不存在; 3(10-9) - (10-8)= ABS(-1)= 2; 4:(10-2) - (10-6)=(4)= 4;(10-2) -
5:通過;

============== ============= 2 ============== === ===========
然後我需要計數的結果:
所以它將:
用戶2:COUNT =(4 + 7)= 11;
用戶3:COUNT =(2 + 2 + 4)= 8;
並刪除此結果金額:
用戶2:COUNT = COUNT/2 = 11/2 = 5.5;
用戶3:COUNT = COUNT/3 = 8/3 = 2.666666666666667;

============== ============= 3 ============== === ===========

而在結束:
我想看到那種只有數據,沒有被標記+結果和排序有什麼第一用戶:
所以,我會有下一行:

從第一用戶:
2-5-4
從第二用戶:
3-4-6
3-6-10

然後排序在結束標記+結果和我們將有
1:3-6-10,原因:(10 + 2.666666666666667 = 12。666666666666667)
2:2-5-4,原因:(4 + 5.5 = 9.5)
3:3-3-3,原因:(3 + 2.666666666666667 = 5.666666666666667)

+0

你能更好地解釋比較規則嗎? –

+0

好吧,聽我有db-table用戶名,水果名稱和每個水果的標記!一個用戶想要嘗試其他水果,他從來不會品嚐到 ,但他想要別的東西。查詢必須找到水果名稱最匹配的用戶,然後通過標記進行比較...然後爲每個用戶設置最合適的結果,然後通過此結果對此用戶進行排序並返回id。 – serge

回答

0

要獲得匹配用戶列表:

select t.user, count(*) as NumMatches 
from table t join 
    table t1 
    on t.data = t1.data and 
     t.mark = t1.mark and 
     t1.userid = 1 and 
     t.userid <> 1 
group by t.user; 

得到他們的細節,我們不得不加入在後面:

select tu.* 
from (select t.user, count(*) as NumMatches 
     from table t join 
      table t1 
      on t.data = t1.data and 
       t.mark = t1.mark and 
       t1.userid = 1 and 
       t.userid <> 1 
     group by t.user 
    ) tu join 
    table t 
    on tu.user = t.user 
order by t.NumMatches desc, t.user; 
+0

謝謝!但我還有一個問題 - 我想**更高級的排序**,因爲我不正確地說我的答案。 所以,你寫下一行:'t.mark = t1.mark和'我想改變它! **請看我的帖子 - 我更新了** – serge

+0

@serge。 。 。在回答問題後改變問題是不禮貌的。如果一個帖子回答你的問題,而你很傾向於,你應該接受和/或向上投票。如果您還有其他問題,請提出另一個問題。 –

+0

對不起。謝謝!我可以再添加一個問題,當然! – serge