2012-03-19 6 views
2

私はこれが愚かな解決策を持っていることを知っていますが、申し訳ありませんが、私はちょっと混乱しています。MySQLの2つのCOUNT文の合計

2つのSELECT COUNT文があります。例:

ステートメント1

SELECT COUNT(softwareone) AS totalcount 
FROM my_table WHERE softwareone LIKE '%typeone%' 

トータルカウント= 3 _

ステートメント2

SELECT COUNT(softwaretwo) AS totalcount 
FROM my_table WHERE softwaretwo LIKE '%typeone%' 

totalcout = 1

私はtotalcount = 4を得るために両方の合計を合計したいと思います。それを行う方法がありますか?

注:softwareoneとsoftwaretwoの列のソフトウェアタイプは同じタイプ(同じ値)です。

ありがとうございます。

+1

です使用することができますか? –

答えて

4

一つの方法は、書くことです:

(両方 LIKE '%typeone%'をしている softwareone場合と softwaretwo、その行が二回カウントするように)両方の条件が満たされたとき CASE ... END式は 2と評価されます
SELECT SUM(CASE WHEN softwareone LIKE '%typeone%' 
       AND softwaretwo LIKE '%typeone%' 
       THEN 2 
       ELSE 1 
      END 
     ) AS "totalcount" 
    FROM my_table 
WHERE softwareone LIKE '%typeone%' 
    OR softwaretwo LIKE '%typeone%' 
; 

、および1それらのうちの1つだけです。したがって、SUM(CASE ... END)は、1つの条件が満たされている行の総数に、他の条件が満たされている行の合計数を加えたものです。

+2

+1サブクエリの解決策では、MySQLはレコードを複数回スキャンします。このクエリでは、MySQLは一度だけスキャンします。 –

3

あなたはそれが両方とも `%のtypeone%の`のフィルタを選択することを目的に

Select l1.totalcount + l2.totalcount FROM 
(SELECT COUNT(softwareone) AS totalcount 
FROM my_table WHERE softwareone LIKE '%typeone%') as l1, 
(SELECT COUNT(softwaretwo) AS totalcount 
FROM my_table WHERE softwaretwo LIKE '%typeone%') as l2 
関連する問題