2012-03-17 16 views
0

のJOIN:COUNT関数は、私は次の表を持っている

A FromA User 
1 NULL Bob 
2 1  Bob 
3 1  Chris 
4 2  Chris 

ユーザーはアイテムA. FromAは、ユーザーからそれをつかんソースで作成された人の名前です。

私はクリスの最も頻繁な周波数源であることを知りたいと思います。

マイクエリ

SELECT count(T1.A GROUP BY T1.User), T1.User 
FROM Table T0 
INNER JOIN Table T1 ON T0.FromA=T1.A 
WHERE T0.User='Chris' 

それはBob=2を返す必要があります。しかし、それは動作していないようです。

答えて

1

はこれを試してみてください動作するはずです:

select t2.user, count(*) Total from t t1 
join t t2 on t1.fromA = t2.a 
where t1.user = 'Chris' 
group by t2.user 
order by Total desc 
limit 1 

limit 1はあなただけの最も頻繁に使用されるソースを提供します。

編集:

インナー参加フェッチするために失敗したレコード=> 1 | NULL |ボブ 'fromA'列にはnull値があります。だから、左への参加に切り替える - Angelin Nadar

いいえ。ここではこれを試してみてくださいworking example

+0

がレコード=> 1を取得するために失敗します| NULL |ボブ 'fromA'列にはnull値があります。だから、左への切り替えjoin –

+0

@AngelinNadar左の結合を使う必要はありません。それを使うのは効率が悪いです。クエリがテストされます。データを再分析してください。左結合を使用してユーザーBobにクエリを実行すると、与えられたデータのクエリがどのようなものになるか考えてみましょう。 –

+1

あなたは絶対にありません。右n URクエリはすべての条件を満たす+1 –

1

あなたのグループは間違った場所にあります。これは

SELECT count(T1.A), T1.User 
FROM Table T0 
INNER JOIN Table T1 ON T0.FromA=T1.A 
WHERE T0.User='Chris' 
GROUP BY T1.User 
+0

あなたが欠落している内部結合クリスの最も周波数源 –

1

ですが、私は表の別名を変更した:

SELECT count(*), t_User.User 
FROM 
    Table t_FromA 
    LEFT OUTER JOIN 
    Table t_User 
    ON t_User.FromA=t_FromA.A 
WHERE t_FromA.User='Chris' 
関連する問題