仅获取具有特定联接表计数的用户

时间:2014-01-16 21:43:23

标签: mysql sql

我的SqlFiddle

看起来很简单,但对于我的生活,我似乎无法得到我想要的结果。请记住,这种情况发生在拥有超过600万条记录的服务器上,因此必须高效。

我想让那些状态1为3或更高的项目表加入的用户不是2项状态为1的用户必须是> = 3。

SELECT 
    user.id,
    user.name,
    item.id as item_id,
    itemstatus.item_status,
    COUNT(item.status) as status
FROM user
JOIN item ON (user.id = item.user_id)
JOIN itemstatus ON (item.status = itemstatus.id)
WHERE item.status = 1
GROUP BY user.id

我上面的当前查询得到了所有计数。我如何只获得具有3或以上数量的那些。提前致谢。我希望我明白这一点。

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您只需要COUNT(item.status)大于或等于3的记录,在这种情况下,您需要在GROUP BY子句后使用HAVING子句。 HAVING子句有点像聚合值的WHERE子句。

SELECT 
    user.id,
    user.name,
    item.id as item_id,
    itemstatus.item_status,
    COUNT(item.status) as status
FROM user
JOIN item ON (user.id = item.user_id)
JOIN itemstatus ON (item.status = itemstatus.id)
WHERE item.status = 1
GROUP BY user.id
HAVING COUNT(item.status) >= 3