Mysql 从多个表中选择计数,并按一个字段分组
我有带字段的“用户”表Mysql 从多个表中选择计数,并按一个字段分组,mysql,join,count,group-by,Mysql,Join,Count,Group By,我有带字段的“用户”表 用户名、用户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 每个表中将有数百万条记录 我必须在用户给定的时间范围内从数据表中选择类型计数,并且必须在用户i
用户名、用户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
每个表中将有数百万条记录
我必须在用户给定的时间范围内从数据表中选择类型计数,并且必须在用户id的帮助下获得相应的用户名称
有人能帮我找到最好的解决方案吗。试试这个查询,其中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
请记住不要使用UNION,但UNION ALL as UNION将返回仅将类似行合并为一行的结果,这可能会导致问题您是否为一年中的每个月创建表?这是一种糟糕的模式设计,因为您几乎不知道表要连接到哪里。