假设我有三个表(每个表中有列):
USERS:id,name,account_id
帐户:id,name
活动:event_id,user_id,日期
我希望在一个日期范围内获取每个用户的EVENTS事件总数,以及用户的姓名和帐户名称。
我可以使用GROUP BY按user_id对结果进行分组,但是如何将其加入用户和帐户以获取每行中的信息?我想得到一个输出:
+-------+---------------------+--------+
| name | account_name |count(*)|
+-------+---------------------+--------+
| Joe | XYZ, Inc. | 10 |
| Bob | Vandalay Industries | 21 |
| Mary | Account Name Here | 32 |
+-------+---------------------+--------+
其中第三列是指定日期范围内该user_id的EVENTS表中的事件总数。
抱歉,我永远无法得到像这样的联接......
答案 0 :(得分:1)
假设您在id
和users
表格上有accounts
列
SELECT
users.name,
accounts.name,
count(events.event_id)
FROM
users
INNER JOIN events ON events.user_id = users.id
INNER JOIN accounts ON accounts.id = users.account_id
WHERE
events.date between <startdate> AND <enddate>
GROUP BY
users.name,
accounts.name
答案 1 :(得分:0)
明显的做法是:
1)对连接查询的结果进行分组:
SELECT users.name, accounts.name, COUNT(*)
FROM users, accounts, events
WHERE users.account_id=accounts.id
AND users.id=events.user_id
WHERE events.date>$START_DATE
AND events.date<$END_DATE
GROUP BY users.name, accounts.name;
2)或者,您可以将仅作为数据源的事件使用统一查询并加入到该数据源中:
SELECT users.name, accounts.name, ilv.event_count
FROM (SELECT user_id, count(*)
FROM events
WHERE events.date>$START_DATE
AND events.date<$END_DATE
GROUP BY user_id) as ilv,
users, accounts
WHERE users.id=ilv.user_id
AND users.account_id=accounts.id;
HTH
下进行。