【问题标题】:mysql: UNION GROUP BY without subquerymysql: UNION GROUP BY 没有子查询
【发布时间】:2015-05-07 17:26:20
【问题描述】:

我有问题。 我想将查询包装到视图中。为此,我必须转换 FROM 中的子查询。我的查询是这样的:

SELECT 
    b.id, 
    b.summe, 
    getBauNrKomplett(b.id) as bauNrKomplett, 
    b.parent_id 
FROM (
        SELECT 
            pt.id, 
            pt.parent_id, 
            SUM(m.menge*p.preis_kostenanschlag) as summe 
        FROM menge m 
        join projektposition p ON (m.projektposition_id=p.id) 
        join positionstyp pt on (p.positionstyp_id=pt.id) 
        GROUP BY pt.id
    UNION
        SELECT 
            pt2.id, 
            pt2.parent_id, 
            null as summe 
        FROM positionstyp pt2
    ) b
GROUP BY b.id

我找不到其他可能性。由于 GROUP BY,我需要包装 UNION 语句。

有人能想象出另一种解决方法吗?

非常感谢和最好的问候, 托比亚斯

【问题讨论】:

  • 参见 DISTINCT。 MySQL 支持这种对 GROUP BY 子句的滥用。它甚至对它进行了惊人的优化,但这不是它的用途。

标签: mysql group-by subquery union


【解决方案1】:

我相信这是平等的。如果没有 - 您能否向 sqlfiddle 提供一些数据和解释?

    SELECT 
        pt.id, 
        pt.parent_id, 
        SUM(IF(m.menge IS NULL,0,m.menge*p.preis_kostenanschlag)) as summe,
        getBauNrKomplett(p.id) as bauNrKomplett, 
    FROM positionstyp pt
    LEFT JOIN projektposition p 
    ON (p.positionstyp_id=pt.id) 
    LEFT JOIN menge m 
    ON (m.projektposition_id=p.id) 
    GROUP BY pt.id

【讨论】:

  • 完美。它适用于此代码(源自您的代码,只需要进行两次小的更正)。 ` SELECT pt.id, pt.parent_id, SUM(IF(m.menge IS NULL,0,m.menge*p.preis_kostenanschlag)) as summe, getBauNrKomplett(pt.id) as bauNrKomplett FROM positiontyp pt LEFT JOIN projektposition p ON (p.positionstyp_id=pt.id) LEFT JOIN menge m ON (m.projektposition_id=p.id) GROUP BY pt.id `
猜你喜欢
  • 1970-01-01
  • 2012-08-08
  • 2012-09-11
  • 2014-08-09
  • 1970-01-01
  • 2021-11-15
  • 2017-06-09
  • 2011-08-05
  • 1970-01-01
相关资源
最近更新 更多