Home > Software design >  Filtering SQL WHERE clause
Filtering SQL WHERE clause

Time:10-19

I am trying to figure out what to put in the WHERE clause that will return the m.sender id, a count of m.receiver id's that are NOT in the m.sender's department, and the department name that m.sender is in.
For example, if the m.sender id is in 'Sales', the count of m.receiver ids will be from all departments except 'Sales'.
I am trying to find a list of m.sender ids that have the highest out of department communication.
(Using Google BigQuery)

SELECT DISTINCT m.sender, COUNT(DISTINCT m.receiver) AS messages_received, e.department
FROM collaboration.messages as m
JOIN collaboration.employees as e
ON m.sender = e.id
WHERE ?
GROUP BY m.sender, e.department
ORDER BY messages_received DESC
LIMIT 5;
messages messages sent and received
sender represents the employee id of the employee sending the message.
receiver represents the employee id of the employee receiving the message.
employees information on each employee
id represents the employee id of the employee
department is the department within the company.

CodePudding user response:

If I understand correctly this could be what you need:

SELECT DISTINCT m.sender, COUNT(DISTINCT m.receiver) AS messages_received, e.department
FROM collaboration.messages as m
JOIN collaboration.employees as e
ON m.sender = e.id

LEFT JOIN collaboration.employees as receiver_dep
ON m.receiver = receiver_dep.id 

WHERE receiver_dep.department <> e.department

GROUP BY m.sender, e.department
ORDER BY messages_received DESC
LIMIT 5;

You need an extra join to obtain the receiver's department and check if it is different from the sender's.

  • Related