I have a table representing sending msgs between friends on FB:
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