我有一些表大致是这样的:
Client:
id
name
Employee
id
name
Email
id
to : Client [ForeignKey]
from : Employee [ForeignKey]
EmailStats (Tracks the stats for a particular single email)
id
email : Email [OneToOne]
curse_words : 10
我想做什么:我想获取所有至少给一个客户写过一封电子邮件的员工,以及他们的次数我在他们发给那个单一客户的任何一封电子邮件中都诅咒过,即针对特定的 Client
返回
[
('name' : 'Paul', 'total_curses' : 255),
('name' : 'Mary', 'total_curses' : 10),
]
我尝试过的:
我对 SQL 的理解很薄弱,因为我习惯于使用 ORM。我无法理解 Employees
的正常检索如何链接到诅咒词的计数。这是我所做的(客气点!):
SELECT DISTINCT (
SELECT SUM(EmailStats.curse_words)
FROM EmailStats
INNER JOIN (
SELECT Email.id
FROM Email
INNER JOIN Employee
ON Email.from = Employee.id
WHERE Email.to = 5 // Assuming 5 is the client's id
) filtered_emails ON EmailStats.email = filtered_emails.id
) AS 'total_curses', Employee.name
FROM Employee
INNER JOIN Email
ON Email.from = Employee.id
WHERE Email.to = 5 // Assuming 5 is the client's id
ORDER_BY 'total_curses'
这不起作用 - 它似乎获取了正确的 Employees
(那些发送给 Client
的人),但 curses 计数似乎是所有人的总数向该 Client
发送电子邮件,而不仅仅是来自该 Employee
的那些诅咒。
我觉得我在这里严重误解了一些东西,所以如果有人能提供一个如何成功解决这个问题的例子,我将不胜感激。
最佳答案
您想对连接表的结果进行分组:
SELECT Employee.name, SUM(EmailStats.curse_words) total_curses
FROM Email
JOIN EmailStats ON EmailStats.email = Email.id
JOIN Employee ON Employee.id = Email.from
WHERE Email.to = 5
GROUP BY Employee.id
ORDER BY total_curses DESC
关于mysql - 对嵌套的外键关系执行 SUM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11319762/