私は大まかに次のようないくつかのテーブルを持っています:
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
やりたいこと: 1 人の顧客に少なくとも 1 通の電子メールを書いたすべての従業員と、その 1 人の顧客に宛てた電子メールの中で悪態をついた回数 (つまり、特定のClient
返品)を取得したい
[
('name' : 'Paul', 'total_curses' : 255),
('name' : 'Mary', 'total_curses' : 10),
]
私が試したこと:
ORM の使用に慣れているため、SQL についての私の理解はかなり弱いものです。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
そこへのすべての電子メールの合計であるようです。Client
Employee
ここで何かをひどく誤解していると感じているので、これをうまく行う方法の例を誰かが提供できれば、いくつかの指針をいただければ幸いです。