代码之家  ›  专栏  ›  技术社区  ›  lock

如何从一个具有不同where子句的表中两次获得sum()?

sql
  •  4
  • lock  · 技术社区  · 14 年前
    SELECT 
        sum(qty) as accept,
        (SELECT sum(qty) 
         FROM pile 
         WHERE pf=false) as reject 
    FROM pile 
    WHERE pf=true;
    

    我以前用过的另一种选择是 SELECT sum(qty) FROM pile GROUP BY pf 但我需要它们作为列而不是行。

    还有其他解决办法吗?

    5 回复  |  直到 14 年前
        1
  •  8
  •   beach    14 年前

    一次通过桌子。

    SELECT 
        sum(CASE WHEN pf = TRUE THEN qty ELSE 0 END) as accept,
        sum(CASE WHEN pf = FALSE THEN qty ELSE 0 END) as reject
    FROM pile;
    
        2
  •  2
  •   eumiro    14 年前
    SELECT pileTrue.sumTrue as accept, pileFalse.sumFalse as reject
    FROM
    (SELECT sum(qty) sumFalse FROM pile WHERE pf=false) as pileFalse,
    (SELECT sum(qty) sumTrue  FROM pile WHERE pf=true ) as pileTrue
    
        3
  •  1
  •   Dustin Laine    14 年前

    不是更好,而是更可读。

    SELECT
    accept = (SELECT sum(qty) FROM pile WHERE pf = true),
    reject = (SELECT sum(qty) FROM pile WHERE pf = false)
    
        4
  •  0
  •   zerkms    14 年前
    SELECT (SELECT SUM(qty)
              FROM pile
             WHERE pf = true) AS accept,
           (SELECT SUM(qty)
              FROM pile
             WHERE pf = false) AS reject
    
        5
  •  0
  •   AEMLoviji    14 年前
      check it
    
    
    
      select max(accept), max(v2 ) 
        from
        (
                  SELECT 
                        sum(qty) as accept,null v2  
                    FROM pile 
                    WHERE pf=true
                    union
                     SELECT null accept,sum(qty) v2  
                         FROM pile 
                         WHERE pf=false
        )
        group by accept,v2