我的模式中有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