从一个表中获取结果,按用户和日期分组,从另一个表中加入用户的名称和帐户信息?

时间:2010-07-13 23:15:06

标签: mysql join

假设我有三个表(每个表中有列):

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表中的事件总数。

抱歉,我永远无法得到像这样的联接......

2 个答案:

答案 0 :(得分:1)

假设您在idusers表格上有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

下进行。