[英]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.