【问题标题】:count,sum on both main table(union) and its left table in mysqlmysql中主表(联合)及其左表的计数,总和
【发布时间】:2016-07-06 00:33:43
【问题描述】:
SELECT pa.prid,pa.prodid,pa.prva, ps.psna,ps.psnamid,ps.psval 
    FROM ( SELECT pid,prodid,count(prodid) as prid , 
          sum(prval) as prva
          FROM prodarpa 
          WHERE fcl = 1  GROUP BY prodid
    UNION SELECT pid,prodid,count(prodid) as prid , 
          sum(prval) as prva
          FROM prodarpb 
          WHERE fcl = 1  GROUP BY prodid ) AS pa 
    LEFT JOIN (SELECT psid,psnamid,count(psnamid) as psna,SUM(psvalue) as psval 
               FROM prosection GROUP BY psnamid ) AS ps
               ON ( pa.pid = ps.psid ) 

因此我想要如下结果:

pa.prid | pa.prodid | pa.prva | ps.psna | ps.psnamid | ps.psval 
 193        3           300      193         2          499
 200        5           100       0          0           0
  0         0            0       201         8          300
 163        10          678      163         5          453

我的意思是如果 pa.prid 值不在 ps.psna 中,那么它应该在 ps 表的每一列中显示 0 值,并且在另一种方式上相同

但它没有发生

【问题讨论】:

    标签: php mysql join group-by union


    【解决方案1】:

    如果没有数据可以从中得出结论,那就是猜测。

    SELECT
          pa.prid
        , pa.prodid
        , pa.prva
        , ps.psna
        , ps.psnamid
        , ps.psval
    FROM (
          SELECT
                pid
              , prodid
              , COUNT(prodid) AS prid
              , SUM(prval) AS prva
          FROM (
                SELECT
                      pid
                    , prodid
                    , prval
                FROM prodarpa
                WHERE fcl = 1
                UNION ALL
                      SELECT
                            pid
                          , prodid
                          , prval
                      FROM prodarpb
                      WHERE fcl = 1
                ) AS s
          GROUP BY
                pid
              , prodid
          ) AS pa
          LEFT JOIN (
                SELECT
                      psid
                    , psnamid
                    , COUNT(psnamid) AS psna
                    , SUM(psvalue) AS psval
                FROM prosection
                GROUP BY
                      psid
                    , psnamid
          ) AS ps ON (pa.pid = ps.psid)
    

    使用 group by 时请注意,您始终指定所有非聚合列。 MySQL 确实提供了不需要的语法 - 但是使用该语法的结果不可靠,并且仅在启用 ONLY_FULL_GROUP_BY 时才允许使用该语法。

    见:https://dev.mysql.com/doc/refman/5.0/en/group-by-handling.html

    【讨论】:

    • 谢谢会尝试..但是上面的查询将运行一个问题...如果我在两个表中都有更多的记录
    • “lac”不是全球使用的计量单位。但是,表中的 100,000 行并不是很大,但我无法告诉您查询的运行速度。您可以在资源匮乏的 vm 或我不知道的超规格服务器阵列中运行它
    猜你喜欢
    • 1970-01-01
    • 2019-12-20
    • 1970-01-01
    • 2016-08-25
    • 1970-01-01
    • 1970-01-01
    • 2010-11-09
    • 2015-10-20
    • 1970-01-01
    相关资源
    最近更新 更多