Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 从多个表中选择计数,并按一个字段分组_Mysql_Join_Count_Group By - Fatal编程技术网

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将返回仅将类似行合并为一行的结果,这可能会导致问题

您是否为一年中的每个月创建表?这是一种糟糕的模式设计,因为您几乎不知道表要连接到哪里。