看起来很简单,但对于我的生活,我似乎无法得到我想要的结果。请记住,这种情况发生在拥有超过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或以上数量的那些。提前致谢。我希望我明白这一点。
答案 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