如何从当前 MySQL 数据库中查询和重新组织数据?

Posted

技术标签:

【中文标题】如何从当前 MySQL 数据库中查询和重新组织数据?【英文标题】:How to Query & re-organize Data from current MySQL database? 【发布时间】:2015-08-06 16:25:59 【问题描述】:

我有以下数据库结构:

而里面存储的数据如下:

但是,我喜欢从database 中选择以下格式的数据:

如何使用一个SELECT 语句来实现这一点?如果不能使用单个SELECT 语句,如何通过sql 代码实现这一点?有人可以给我实现吗?

【问题讨论】:

有多少种不同的m1-t1,m1-t2... 是可能的,使用 sql 不能完全按照您列出的方式完成,但可以在一定程度上实现。 @AbhikChakraborty, m1-t1, m1-t2... 不是固定长度。例如,它可能是m1-t1, m1-t2, m1-t3, m2-t1, m2-t2, m3-t1。我要的表应该由m组织。 您想要的结果不过是数据透视,对于已知的项目集很容易,但是在您的情况下,您需要动态 sql 来实现它。检查 mysql 动态数据透视表。 x_value 也不限制或固定为 0、10 和 20? @DangeMask,是的,为了简化问题,我们假设它们首先固定为0, 10, 20 【参考方案1】:

我可以使用一个 SELECT 语句来实现吗?

是的,你可以。您将不得不对JOINGROUP BY 语句进行一些操作,但可以实现。

编辑:

让我们尝试多个JOIN 语句:

Select sum.name, x0.y_value, x10.y_value, x20.y_value
    from test_summary as sum
    join test_details as x0 on sum.id=x0.id and x0.x_value=0
    join test_details as x10 on sum.id=x10.id and x10.x_value=10
    join test_details as x20 on sum.id=x20.id and x20.x_value=20

基于对multiple joins 和join with where clause 的回答

【讨论】:

你的问题是,如果它可以实现;-) 再看,它并不像我想象的那么容易。我会考虑一段时间并尝试找到解决方案。 请试试我的新建议。我对 MS SQL 比较熟悉,所以我希望我的语法是正确的。 您提供的解决方案仅适用于x_value 实例较小的情况。如果x_value 的范围为 0 到 100,第 10 步,0, 10, 20, 30, 40...90, 100。这个SELECT 声明需要永远! 我问你是不是有限制。这就是原因。恐怕我的经验仅限于这个解决方案。 您也可以尝试在明细表上创建索引以加快搜索速度。但我不确定它是否会有很大帮助。【参考方案2】:

您喜欢的东西称为数据透视表,这超出了 mySQL 等关系数据库系统的范围。所以OLAP有很多特殊的平台。但是,如果您不需要任何全面的 OLAP 东西,而是使用 mySQL 和 php 生成一些数据透视表,则不需要任何特殊的 sql,但需要通过 php 编写此类演示文稿,可能使用一些商业框架,如 this 或一些开源code

【讨论】:

以上是关于如何从当前 MySQL 数据库中查询和重新组织数据?的主要内容,如果未能解决你的问题,请参考以下文章

在日期之间选择mysql查询?

10-07重新生成和组织索引

重新组织 vs 重新生成索引

如何查看数据库密码

简单的记录一次简单的优化

mysql 如何获取数据表中离当前日期最近的数据