2016-09-25 2 views
0

私のデータベースから何かを選択する際に問題があります。問題はtable2.likesは好き嫌いの両方が含まれていることであるtable2.likesmysqlデータベースから何かを選択し、count(where)で注文してください

の最高値に

SELECT name 
FROM table1 
JOIN table2 
ON table1.id=table2.advid 
GROUP BY advid 
ORDER BY COUNT(table2.likes) ASC 

この意志出力以上とnametable2.likes:ここでは、SQL文です。好きなものは1と表記され、嫌いなものは2で表記されます。 ...

The table

...テーブルに書き込むがある場合

現在、構文は、結果は6になりますので、私はこの結果を必要と好き嫌いの両方をカウントしますカウントすると、嫌いを好きな人の数から推測する必要があることを意味します。これはまた文章のこの部分を意味します:ORDER BY COUNT(table2.likes) ASCは変更する必要がありますが、私はどのように分かりません。

答えて

0

使用SUM()条件付き集約:

SELECT name 
FROM table1 t1 JOIN 
    table2 t2 
    ON t2.id = t2.advid 
GROUP BY name 
ORDER BY SUM(CASE WHEN t2.likes = 1 THEN 1 ELSE -1 END) ASC; 

注:私はnameであることをGROUP BYを変更しました。 GROUP BYの列は、選択する列と一致する必要があります。

+0

お返事ありがとうございます!できます :))))) – SaTTko

0

嫌いの場合は1、嫌いの場合は-1をカウントするケース式を使用します。それは良いスタイルと見なされ、結合して集約しないで、すでに集約されたデータを結合するのではなくエラーが起こりにくいと考えられます。

select t1.name, t2.sumlikes 
from table1 t1 
join 
(
    select advid, sum(case when likes = 1 then 1 else -1 end) as sumlikes 
    from table2 
    group by advid 
) t2 on t2.advid = t1.id 
order by sumlikes; 

あなたはleft outer joinに参加し、代わりにcoalesce(t2.sumlikes, 0)を選択し回し、その後、あまりにも、のようなエントリせずに名前をリストします。

関連する問題