I have a table representing sending msgs between friends on FB:
x
Sender Receiver Msgs #
Dave John 6
John Dave 1
Sam Dave 2
Mark Ash 1
Ash Dave 3
Mark Steve 8
What is an SQL query to show how many have 1,2,3… friends:
Num of friends Quantity
1 3
2 2
3 1
I have tried using a loop, but it just gets too complicated…
Advertisement
Answer
You could use a couple of sub-queries to achieve this by following an approach like this:
- List of all unique senders and receivers.
- Count of the number of friends per unique sender.
- Group the number of friends and count how many occurrences there are.
Here’s some code that shows it working (obviously field names need to change to match your actual table):
CREATE TABLE msgs (Sender VARCHAR(20), Receiver VARCHAR(20), Msgs INT);
INSERT INTO msgs VALUES ('Dave', 'John', 6), ('John', 'Dave', 1),('Sam', 'Dave', 2),('Mark', 'Ash', 1), ('Ash', 'Dave', 3),('Mark', 'Steve', 8);
SELECT FriendCount AS `Num of friends`,
COUNT(*) AS Quantity
FROM (
SELECT Sender,
COUNT(*) AS FriendCount
FROM (
SELECT DISTINCT
Sender,
Receiver
FROM msgs
UNION
SELECT DISTINCT
Receiver,
Sender
FROM msgs
) a
GROUP BY Sender
) a
GROUP BY FriendCount
ORDER BY FriendCount;
DROP TABLE msgs;
Output:
Num of friends Quantity
1 3
2 2
3 1