2012-12-31 78 views
0

我知道這樣的問題以前就已經問過了,但我不知道如何將它應用到我的代碼中。我有兩張桌子。我有一個entry表,用於存儲這樣的條目:按另一個表的順序排列SELECT語句?

id | name | description 
1 Test Test entry 

在其他表,我有一個rating表是這樣的:

id | entryid | rating 
1 | 1  | 1 
2 | 1  | -1 

我想列出的第一個表中的所有條目,但按總評級排序。因此,在這個例子中,條目#1的評分爲0,因爲1 + -1 = 0.有沒有一種方法可以用查詢來做到這一點?

+0

你的問題很不清楚。你提到了'COUNT',但你的描述是'SUM'來表示數據,並且你提到'ORDER BY',但是按排序排序,並且文本中沒有關於排序任何內容的信息。你可以編輯和澄清,也提供表名稱?謝謝。 –

+0

是的,對不起,我沒有意識到這是一筆錢,直到我寫東西。 – CommunistPancake

回答

2

選中此SQLFIDDLE DEMO。您只需使用Sum即可計算每個entryID的所有評分。

查詢:

select r.entryid, sum(r.rating) 
from ratings r 
group by r.entryid 
; 

結果:

ENTRYID  SUM(R.RATING) 
1   -1 
2   2 

最終查詢:

select e.id, e.name, sum(r.rating) 
from entry e 
left join 
ratings r 
on r.entryid = e.id 
group by e.id 
; 

最終結果:

ID NAME SUM(R.RATING) 
1 Test1 -1 
2 Test2 2 
0

你可以使用內嵌視圖這樣的:

select id, `name`, description from (
select t1.id, t1.`name`, t1.description, sum(t2.rating) as sum_rating 
from 
t1 inner join t2 on t1.id = t2.entryid 
group by t1.id, t1.`name`, t1.description 
) as t 
order by sum_rating desc 

所以,你從查詢的內部那些資金計算相關的所有收視率的總和,然後順序。如果您的第一張表的某些行沒有任何評分,請用左連接替換內連接。

+0

什麼是「內聯視圖」?這看起來像一個子查詢。 – Barmar

+0

但我不認爲你需要子查詢,你可以在連接本身上使用'ORDER BY'。 – Barmar

+0

@Barmar - 我不認爲CommunistPancake要選擇總和,只是爲了排序,所以需要內聯視圖/子查詢來從輸出列中「隱藏」總和,但是使其可用於排序。奇怪的是,接受的答案沒有訂單的條款! –