Reputation: 12471
I have created a new system that there can used with referral system, but how can I get the information about the user who has the largest number of referrals?
I imagine the SQL command is like this:
select * from user where refered_user=max(count(user.refered_user));
What is the correct notation?
Upvotes: 0
Views: 391
Reputation: 7349
I presume that your user table looks something like:
TABLE: user
COLUMN: id int PK
COLUMN: refered_user int FK ON user.id
Edit: removed HAVING clause and added subquery
Without using HAVING to find the MAXimum number of referrals, I have added a new subquery to find this:
SELECT MAX(referals)
FROM (
SELECT refered_user, COUNT(1) referals
FROM user
GROUP BY refered_user
)
Then, I have used this inside a query to get the users who have referred this many times:
SELECT refered_user, referals
FROM (
SELECT refered_user, COUNT(1) referals
FROM user
WHERE refered_user IS NOT NULL
GROUP BY refered_user
) AS ruser
WHERE referals = (
SELECT MAX(referals)
FROM (
SELECT refered_user, COUNT(1) referals
FROM user
WHERE refered_user IS NOT NULL
GROUP BY refered_user
) AS muser
)
Finally, I have used this as the JOIN query:
SELECT u.*
FROM user u
INNER JOIN (
SELECT refered_user, referals
FROM (
SELECT refered_user, COUNT(1) referals
FROM user
WHERE refered_user IS NOT NULL
GROUP BY refered_user
) AS ruser
WHERE referals = (
SELECT MAX(referals)
FROM (
SELECT refered_user, COUNT(1) referals
FROM user
WHERE refered_user IS NOT NULL
GROUP BY refered_user
) AS muser
)
) AS r ON (r.refered_user = u.id)
End Edit
Please note that as more than one user can have the same (maximum) number of referrals, then this query can return 0 (for an empty table), 1 or more rows.
Upvotes: 1