从多个表中选择计数并按一个字段分组

时间:2013-01-29 06:46:23

标签: mysql join count group-by

我有“用户”表格,其中包含字段
user_name,user_id

我有像

这样的数据表
data_table_2012_10
data_table_2012_11
data_table_2012_12
data_table_2013_01
data_table_2013_02

每个表包含以下字段

user_id, type ('ALARM', 'EMERGENCY', 'ALIVE', 'DEAD'), date_time

每张表中都会有数百万条记录。

我必须在用户给出的时间范围内从data_tables中选择类型的计数,并且必须在user_id的帮助下获得用户的相应名称。

有人可以用最好的解决方案帮助我。

2 个答案:

答案 0 :(得分:1)

尝试此查询,其中DATE1和DATE2是您的日期范围。您应该联合内部查询中的所有表。您还可以尝试动态创建查询,以便仅在内部查询中包含您使用的日期范围内的表:

select t.user_id,t.type, MAX(users.user_name), SUM(t.cnt)
from
(
select user_id,type,count(*) cnt
from data_table_2012_10 where date_time between DATE1 and DATE2
group by user_id,type

union all

select user_id,type,count(*) cnt
from data_table_2012_11 where date_time between DATE1 and DATE2
group by user_id,type

union all
.........................................

union all
select user_id,type,count(*) cnt
from data_table_2013_02 where date_time between DATE1 and DATE2
group by user_id,type
) t
left join users on (t.user_id=users.user_id)
group by t.user_id,t.type

答案 1 :(得分:0)

请记住不要使用UNION,但UNION ALL作为UNION将只返回合并相似的行,这可能会导致问题