簡體   English   中英

MySQL根據相同的值計算多列

[英]Mysql Count multiple columns based on the same values

我有以下喜歡的桌子

    A               B
    Yes             OOS
    No              No
    OOS             Yes
    OOS             No
    Yes             No

我想做以下

Criteria        A               B
Yes             2               1
No              1               3
OOS             2               1

我可以像這樣一欄就對了

Criteria        A 
Yes             2 
No              1 
OOS             2 

這是我必須達到的目標:

SELECT A, count(A) FROM temp_db GROUP BY A;

您需要將值放入單個列中,因此可以使用group by 這是一種方法:

select criteria, sum(A) as A, sum(B) as B
from ((select A as criteria, 1 as A, 0 as B
       from liketable
      ) union all
      (select B, 0, 1
       from liketable
      )
     ) t
group by criteria;

如果不是所有criteria都在兩列中,那么使用並union all方法是MySQL中最安全的方法。 以下是一個細微的調整,可能會在性能方面有所改善:

select criteria, sum(A) as A, sum(B) as B
from ((select A as criteria, count(*) as A, 0 as B
       from liketable
       group by A
      ) union all
      (select B, 0, count(*)
       from liketable
       group by B
      )
     ) t
group by criteria;

通常,對一半的數據執行兩次聚合要比對所有數據進行較大的聚合效率更高。

select val, sum(cntA), sum(cntB)
from (SELECT A as val, count(A) as cntA,        0 as cntB FROM temp_db GROUP BY A;
      union all
      SELECT B as val,        0 as cntA, count(B) as cntB FROM temp_db GROUP BY B)
group by val;

對於此示例數據,您可以使用派生表的聯接來實現:

SELECT qa.Criteria, qa.A, qb.B FROM
(SELECT A AS Criteria, count(A) AS A FROM temp_db GROUP BY A) qa
FULL OUTER JOIN 
(SELECT B AS Criteria, count(B) AS B FROM temp_db GROUP BY B) qb
  ON qa.Criteria=qb.Criteria

但是,如果A列中缺少條件,則這些條件將不會出現在此查詢的結果中,並且您將需要其他人建議的UNION ALL方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM