首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql联合和按相似字段分组

问mysql联合和按相似字段分组
EN

Stack Overflow用户
提问于 2012-06-19 23:01:07
回答 1查看 644关注 0票数 1

下面是我的查询(我用通用的表名替换了表名)。我正在尝试对两个不同的查询进行联合,以便按日期对它们进行分组,以便具有相似日期的结果显示为一行。

我在尝试执行时收到“每个派生表都必须有自己的别名”错误。我打错了什么?

我对此进行了研究,但找不到答案。每个选定的字段都有别名吗?或者问题在第一个选择中?

代码语言:javascript
复制
SELECT SUM(val), id, dat, title FROM (

                      SELECT table1.product_id as id, SUM(table1.qty) as val, DATE_FORMAT(table1.created, '%Y-%m-1') as dat, table2.title as title 
                      FROM table1
                      LEFT JOIN table3 ON table1.event_id = table3.id
                      LEFT JOIN table2 ON table1.product_id = table2.id
                      WHERE table1.user_id = $user_id AND table3.active != 2 AND table3.temp = 0 AND table2.active != 2

                      GROUP BY dat

                      UNION ALL

                      SELECT table4.product_id as id, SUM(table4.qty) as val, DATE_FORMAT(table4.created, '%Y-%m-1') as dat, table2.title as title 
                      FROM table4
                      LEFT JOIN table5 ON table4.festival_id = table5.id
                      LEFT JOIN table2 ON table4.product_id = table2.id
                      WHERE table4.user_id = $user_id AND table5.active != 2 AND table2.active != 2

                      GROUP BY dat

                      )
                      GROUP BY id
                      ORDER BY dat ASC

这是我尝试做的事情:

我的原始结果:

代码语言:javascript
复制
Array
(
[0] => stdClass Object
    (
        [id] => 1
        [val] => 1
        [dat] => 2012-05-1
        [title] => Test Product
    )

[1] => stdClass Object
    (
        [id] => 1
        [val] => 8
        [dat] => 2012-06-1
        [title] => Test Product
    )

[2] => stdClass Object
    (
        [id] => 2
        [val] => 4
        [dat] => 2012-06-1
        [title] => Test Product 2
    )

[3] => stdClass Object
    (
        [id] => 3
        [val] => 6
        [dat] => 2012-06-1
        [title] => Test Product 3
    )

[4] => stdClass Object
    (
        [id] => 1
        [val] => 10
        [dat] => 2012-05-1
        [title] => Test Product
    )

[5] => stdClass Object
    (
        [id] => 1
        [val] => 8
        [dat] => 2012-06-1
        [title] => Test Product
    )

[6] => stdClass Object
    (
        [id] => 2
        [val] => 3
        [dat] => 2012-06-1
        [title] => Test Product 2
    )

[7] => stdClass Object
    (
        [id] => 3
        [val] => 3
        [dat] => 2012-06-1
        [title] => Test Product 3
    )

)

因此,如果他们有相似的日期和ID,我需要这些只是一个结果。如下所示:

代码语言:javascript
复制
    Array
(
[0] => stdClass Object
    (
        [id] => 1
        [val] => 11
        [dat] => 2012-05-1
        [title] => Test Product
    )

[1] => stdClass Object
    (
        [id] => 1
        [val] => 8
        [dat] => 2012-06-1
        [title] => Test Product
    )

[2] => stdClass Object
    (
        [id] => 2
        [val] => 7
        [dat] => 2012-06-1
        [title] => Test Product 2
    )

[3] => stdClass Object
    (
        [id] => 3
        [val] => 9
        [dat] => 2012-06-1
        [title] => Test Product 3
    )

)

如果你还需要什么,请告诉我。提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-19 23:05:47

试试这个:

代码语言:javascript
复制
SELECT SUM(val), id, dat, title FROM (

                  SELECT table1.product_id as id, SUM(table1.qty) as val, DATE_FORMAT(table1.created, '%Y-%m-1') as dat, table2.title as title 
                  FROM table1
                  LEFT JOIN table3 ON table1.event_id = table3.id
                  LEFT JOIN table2 ON table1.product_id = table2.id
                  WHERE table1.user_id = $user_id AND table3.active != 2 AND table3.temp = 0 AND table2.active != 2

                  GROUP BY dat

                  UNION ALL

                  SELECT table4.product_id as id, SUM(table4.qty) as val, DATE_FORMAT(table4.created, '%Y-%m-1') as dat, table2.title as title 
                  FROM table4
                  LEFT JOIN table5 ON table4.festival_id = table5.id
                  LEFT JOIN table2 ON table4.product_id = table2.id
                  WHERE table4.user_id = $user_id AND table5.active != 2 AND table2.active != 2

                  GROUP BY dat

                  ) AS t
                  GROUP BY id, dat
                  ORDER BY dat ASC

如错误所示,每个视图/派生表都必须有一个别名。

编辑:这将给你不同的id/dat对的记录。看来这就是你要找的东西。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11103776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档