2017-03-31 8 views
0

ユーザー評価(user.rating)が6より大きいか、ユーザーが100以上のトランザクション(トランザクションテーブル数)を持つかどうかを選択しようとしています。基本的に、ユーザーが持つトランザクションの数をカウントします(トランザクション数> = 100またはユーザー評価> = 6)。SQL JOIN COUNT where句のカウント値を使用

SELECT * 
FROM `user` 
JOIN (SELECT COUNT(*) 
     FROM transaction 
     WHERE transaction.user_id=user.id 
     AND type='L' 
     AND status='S') AS tcount 
WHERE (user.rating >= '6' OR tcount >= '100') 

答えて

2

ちょうど別の可能な答えのよう、サブクエリなしていることを書くことができますCOUNT(*)

SELECT * 
FROM `user` 
JOIN (SELECT user_id, COUNT(*) cnt 
     FROM transaction 
     WHERE type='L' 
     AND status='S' 
     GROUP BY user_id) AS tcount 
ON  user.id = tcount.user_id 
WHERE (user.rating >= '6' OR tcount.cnt >= '100') 
+0

が、その用途少ないコードとして、このいずれかに変更してくれ不明な列「user.id」を与えています。 –

+0

@MarcAlexander thx:) –

2

あなたはこの

SELECT u.id 
FROM `user` u 
JOIN `transaction` t 
ON t.user_id=u.id 
WHERE t.type = 'L' AND t.status = 'S' 
GROUP BY u.id 
HAVING sum(case when u.rating >= 6 then 1 end) > 0 OR count(*) >= 100 
+0

WHERE句 " –

0

にエイリアスを使用してください。私は単純なスキーマを作成してテストしました。試してみてください。

SELECT * 
FROM user 
WHERE user.rating >= 6 OR (SELECT COUNT(*) FROM transaction WHERE user_id = user.id and type = 'L' and status = 'S') >= 100;