【问题标题】:MySQL Query across multiple similar views跨多个相似视图的 MySQL 查询
【发布时间】:2013-04-15 20:55:41
【问题描述】:

我正在尝试编写一个复合许多 MySQL 视图的查询。我使用的 MySQL 版本是 Amazon 的 AWS RDS 服务提供的最新版本。这些视图如下所示:

视图 1:“AAA 事件计数”

  • Col1:时间戳
  • Col2:计数

视图 2:“BBB 事件计数”

  • Col1:时间戳
  • Col2:计数

我有大约 100 个这样的视图。

我想要一个查询,将这些数据塑造成如下所示:

  • Col1:时间戳
  • Col2:计数
  • Col3:事件类型

这意味着数据看起来像:

2013-01-01T00:00:00Z    10     BBB
2013-01-01T00:00:00Z    10     AAA
2013-04-10T00:00:00Z    26     AAA
2013-04-10T00:05:00Z    28     AAA

时间戳不会是唯一的,但时间 + 事件类型的组合是唯一的。

我尝试了多种方法,但都没有达到我想要的效果。性能不是问题,因为这些是摘要报告,而不是 OLTP 查询。

对解决此问题的好方法有什么建议吗?

【问题讨论】:

  • 只有mysql还是php+mysql?
  • 只是 MySQL。我实际上是将查询结果拉入 Excel 作为数据透视表的输入。
  • SELECT TABLE_NAME, count(*) FROM information_schema.`TABLES` WHERE TABLE_TYPE LIKE 'VIEW' AND TABLE_SCHEMA LIKE 'database_name' GROUP BY table_Name; 可能会让您入门(100% 未经测试)。尽管您因此丢失了时间戳,但这是行不通的。我希望你不需要 UNION 每个视图..
  • 因此,方法是运行一个动态查询,对您的所有视图执行UNION。显然,这是通过information_schema.TABLES 上的循环或只是SHOW TABLES WHERE...; 结果的结果来完成的。

标签: mysql sql reporting


【解决方案1】:

从 View1 中选择 Col1、Col2、“AAA”作为 Col3

联合所有

从 View2 中选择 Col1、Col2、“BBB”作为 Col3

联合所有

从 View3 中选择 Col1、Col2、“CCC”作为 Col3

联合所有

。 . .

等等。

【讨论】:

    【解决方案2】:

    在上述人员的帮助下,最终结果如下所示:

    Select * from 
    (
      (SELECT PointInTime, (Col1+Col2+Col3) as Failures, "ApiName1" FROM Table1)
      union all 
      (SELECT PointInTime, (Col1+Col2+Col3) as Failures, "ApiName2" FROM Table2)
      order by PointInTime
    ) as X;
    

    子查询的使用让我可以根据需要确定最终的列名。

    结果如下:

    PointInTime    FailedBuckets     API
    2013-01-01            0          ApiName1
    2013-01-01            1          ApiName2
    2013-01-02            0          ApiName1
    2013-01-02            1          ApiName2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-26
      相关资源
      最近更新 更多