2017-10-15 8 views
1
talb1       tabl2 
[id - col1]    [tid - col1] 
[1 - aa1]    [1  -  c] 
[2 - ba2]    [1  -  b] 
[3 - ca3]    [1  -  a] 
[4 - da4]    [1  -  d] 
           [2  -  c] 
           [2  -  a] 
           [2  -  b] 
           [3  -  b] 
           [3  -  a] 
           [4  -  a] 

は、私が値を取得する、しかし、彼らはしています私は例ORDER値

01のための最高の試合

を持つ最高のIDでそれらを注文したい、

を命じたことはありません

ID[4] = match['a', 'b', 'c', 'd']; 
ID[2] = match['a', 'b', 'c']; 
ID[3] = match['a', 'b']; 
ID[1] = match['a']; 

ので、私は

ORDER BY COUNT(b.col1) DESCを試してみましたが、それはこのようなクエリを注文する方法を正確に、私はそれが起こるしたいと何もしないだろう明らかに?

注:私がIN Clauseの中でa, b, cを選択した場合、私は順序付けられた値を得ますが、a, b, c, d(すべての文字)を選択するとランダムな値が得られます。

+2

COUNT(b.col1)BYこの 'ORDER DESC'は私にはない、あなたの基準に似て行う必要があります私は 'GROUP BY'を追加しました。クエリtiselfは時々正しく動作しますが、もし私がすべてを選択していれば、あなたはすべてのサンプルデータを追加することができます。 –

+0

@MKhalidJunaidサンプルテーブルの追加 – AXAI

答えて

1

あなたはORDER BY COUNT(...)を使用するためにGROUP BYする必要があります。

SELECT a.id , COUNT(b.col1) AS cnt 
FROM tabl1 a 
LEFT JOIN tabl2 b 
    ON a.id = b.tid 
AND b.col1 IN ('a', 'b', 'c', 'd') 
GROUP BY a.id 
ORDER BY cnt DESC; 

Rextester Demo

+0

はい、 IN問合せの中の 'a、b、c、d ' tはランダムに始まります。 'IN'に 'a、b、c 'がある場合、' a、b、c、d'は完全に偽です。 – AXAI

+0

@AXAI今すぐ確認してください – lad2025

+0

私はこのソリューションについて考えましたが、それは正確な注文のための唯一の可能な解決策ですか? – AXAI

関連する問題