【问题标题】:Select count from multiple tables and group by one field从多个表中选择计数并按一个字段分组
【发布时间】:2013-01-12 16:24:33
【问题描述】:

我有带有字段的“用户”表
用户名,用户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的帮助下获取用户的相应名称。

谁能帮我找到最好的解决方案。

【问题讨论】:

  • 您是否正在为一年中的每个月创建表格?这是糟糕的架构设计,因为您几乎无法知道要在哪里加入表。

标签: mysql join count group-by


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    试试这个查询,其中 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-05
      • 2018-05-17
      • 2014-02-08
      • 2014-06-23
      • 1970-01-01
      • 2014-01-13
      • 2020-05-27
      • 1970-01-01
      相关资源
      最近更新 更多