2017-03-31 42 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

又一个可能的答案。我创建了简化的模式来测试它,请尝试一下并让我知道结果。

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

更改为这个,因为它使用较少的代码。 –

+0

@MarcAlexander thx:) –

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

它在'where子句'中给我未知列'user.id' –

0

你可以写,如果没有子查询,这样

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