0

このような質問が以前にも寄せられたことは知っていますが、自分のコードにどのように適用できるかわかりません。私は2つのテーブルを持っています。entry次のようなエントリを格納するテーブルがあります。

id | name | description
1    Test   Test entry

他のテーブルには、次のratingようなテーブルがあります。

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

最初のテーブルにすべてのエントリを一覧表示したいのですが、合計評価で並べ替えます。したがって、この例では、1 + -1 = 0 であるため、エントリ #1 の評価は 0 になります。これをクエリで行う方法はありますか?

4

2 に答える 2

2

このSQLFIDDLEDEMOを確認してください。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
于 2012-12-31T21:37:24.677 に答える
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

したがって、関連するすべての評価の合計を計算し、クエリの内部からそれらの合計で並べ替えます。最初のテーブルの一部の行に評価がない場合は、内部結合を左結合に置き換えます。

于 2012-12-31T21:34:44.610 に答える