我的模式中有5個表。從四個mysql表中選擇count和sum列和where子句
首先是opn
:
| opnID | submitID | emailID | opnDate | invalidOPN |
+-------+----------+---------+---------------------+------------+
| 1 | 6 | 1 | 2014-10-15 11:45:50 | 2 |
| 2 | 6 | 2 | 2014-10-15 11:55:52 | 0 |
| 3 | 6 | 3 | 2014-10-15 12:41:52 | 10 |
| 4 | 7 | 2 | 2014-10-15 17:45:22 | 1 |
| 5 | 7 | 3 | 2014-10-16 00:45:55 | 5 |
| 6 | 6 | 5 | 2014-10-16 01:45:11 | 0 |
我也有clk
:
| clkID| submitID | emailID | clkDate | invalidCLK |
+-------+----------+---------+---------------------+------------+
| 1 | 6 | 1 | 2014-10-15 11:45:55 | 1 |
| 2 | 6 | 2 | 2014-10-15 11:55:59 | 0 |
| 3 | 6 | 3 | 2014-10-15 12:42:52 | 5 |
| 4 | 7 | 3 | 2014-10-15 17:46:12 | 0 |
| 5 | 6 | 5 | 2014-10-16 00:46:55 | 0 |
一個users
表:
| userID | firstName | secondName |
+--------+-----------+------------+
| 1 | john | smith |
| 1 | susan | bella |
一個submission
表:
| submitID | userID |
+----------+--------+
| 6 | 1 |
| 7 | 2 |
我需要計算opn.submitID以獲取打開的數量並計數clk.submitID以獲取每個用戶的點擊次數以及invalidclk和invalidopn的總數。
這裏是我的預計業績:
| userID | fName | sName | numberOfOpen | SUM(opn.invalidOPN) | numberOfClicks | SUM(clk.invalidCLK) |
+--------+-------+-------+--------------+---------------------+----------------+---------------------+
| 1 | john | smith | 4 | 12 | 4 | 6 |
| 2 | susan | bella | 2 | 6 | 1 | 0 |
我與這兩個查詢試過,但我沒有達到我需要
SELECT users.userID, users.FirstName, users.SecondName, count(opn.submitID) as "Number of Opens", sum(opn.InvalidOPN) as "Number of invalid Opens"
FROM users
RIGHT JOIN (submission INNER JOIN opn ON opn.submitID = submission.submitID and OPNDate between "2013-10-01 00:00:00" AND "2014-10-31 23:59:59") ON submission.UserID = users.UserID group by users.userID
UNION
SELECT users.userID, users.FirstName, users.SecondName, count(clk.submitID) as "Number of clicks", sum(clk.InvalidCLK) as "Number of invalid clicks"
FROM users
RIGHT JOIN (submission INNER JOIN clk ON clk.submitID = submission.submitID and CLKDate between "2013-10-01 00:00:00" AND "2014-10-31 23:59:59") ON submission.UserID = users.UserID group by users.userID
SELECT users.userID, users.FirstName, users.SecondName, count(opn.submitID) as "Number of Opens", sum(opn.InvalidOPN) as "Number of invalid Opens", count(clk.submitID) as "Number of clicks", sum(clk.InvalidCLK) as "Number of invalid clicks"
FROM users, submission, clk, opn
where opn.submitID = submission.submitID and clk.submitID = submission.submitID
And CLKDate between "2013-10-01 00:00:00" AND "2014-10-31 23:59:59"
AND submission.UserID = users.UserID group by users.userID
結果請幫助我,告訴我我需要改變什麼。
Hooray for RIGHT JOIN。尼斯。 – Strawberry 2014-11-03 17:45:14