I’ve created a query that finds the users of a specific site that have liked every photo on the site and stand out as potential bots.
I’m trying to count the number of bots.
My query currently returns all the bot usernames and the number of photos that they’ve liked, but I’m having trouble simply counting them.
It would be ideal to be able to COUNT(*) on the table that the below query generates.
x
SELECT
username,
COUNT(*) AS total_likes
FROM users
JOIN likes
ON likes.user_id = users.id
GROUP BY likes.user_id
HAVING total_likes = (SELECT COUNT(*) FROM photos);
Advertisement
Answer
You can do this with a subquery:
SELECT COUNT(*) as num_potential_bots
FROM (SELECT u.username, COUNT(*) AS total_likes
FROM users u JOIN
likes l
ON l.user_id = u.id
GROUP BY l.user_id
HAVING total_likes = (SELECT COUNT(*) FROM photos)
) u;