2017-01-18 8 views
0

基本的に私は注文レコード

Select * from x 
JOIN y 
on x.id = y.x_id 
where y.tag_id in (1, 2, 3, 4) order by [the amount of hits of y.tag_id] 

ので

yができ言いたい:

id | x_id | tag_id 
1 | 55 | 2 
2 | 55 | 3 
3 | 66 | 1 

私はレコードx.idを作りたい= 55上にソートするx.id = 66. 55には2ヒット(2と3)があり、66には1ヒットしかありません。

答えて

1

サブクエリでx_idあたりのヒット数を調べることができます。 h Xテーブルを計算し、結果を計算された数でソートします。

Select * from x 
JOIN y 
on x.id = y.x_id 
inner join (
    select x_id, count(*) cnt 
    from y 
    group x_id 
) t on x.id = t.x_id 
where y.tag_id in (1, 2, 3, 4) 
order by t.cnt desc; 
1

渡さtag_idに一致するx_idをカウントし、カウントしながら、我々は一致tag_id's

ため x_id'sをカウントする必要があるので、フィルタを適用することが重要である Order by

SELECT * 
FROM x 
     JOIN y 
     ON x.id = y.x_id 
     JOIN (SELECT x_id, 
        Count(*) hit_cnt 
      FROM y 
      WHERE y.tag_id IN (1, 2, 3, 4) 
      GROUP BY x_id) ct 
     ON ct.x_id = y.x_id 
ORDER BY hit_cnt DESC 

でそれを使用します