2012-01-19 6 views
3

同じ列にlike節が複数あると、複数のカウントを実行しようとしています。同じ列に複数のカウントがある - MySQL

私は同じような節のそれぞれに対して基本的なクエリを見つけましたが、それらを組み合わせて1つの結果を生成する必要があります。

select system_user, COUNT(details) from asset_log where details like 'Viewed'; 
select system_user, COUNT(details) from asset_log where details like 'Viewed Web%'; 
select system_user, COUNT(details) from asset_log where details like 'ThumbView'; 
select system_user, COUNT(details) from asset_log where details like 'Exported%'; 

私はその可能性があります、私はちょうどそれを行う方法を知らないです。どんな助けもありがとう。事前に

おかげ

更新:

が、これは私のため

select distinct system_user, 
    SUM(CASE WHEN details ='viewed' then 1 Else 0 end) AS viewed_count, 
    SUM(CASE WHEN details Like 'Viewed Web%' then 1 Else 0 end) AS Web_count, 
    SUM(CASE WHEN details = 'ThumbView' then 1 Else 0 end) AS ThumbView_count, 
    SUM(CASE WHEN details Like 'Exported%' then 1 Else 0 end) AS Exported_count 
from asset_log GROUP BY system_user; 

おかげで働くことになりました!

答えて

5

あなたは「ピボット」カウント

select system_user, 

    SUM(CASE WHEN details ='viewed' then 1 Else 0 end) viewed_count 
    SUM(CASE WHEN details Like 'Viewed Web%' then 1 Else 0 end) Viewed Web_count 
    SUM(CASE WHEN details = 'ThumbView' then 1 Else 0 end) ThumbView_count 
    SUM(CASE WHEN details Like 'Exported%' then 1 Else 0 end) Exported_count 
from asset_log 
where 
    details = 'viewed' or 
    details like 'Viewed Web%' or 
    details = 'ThumbView' or 
    details like 'Exported%' 
group by 
     system_user 

は注意することはSUM /ケースを使用することができます。私が好き」を使用して気にしないだろう「ワイルドカード

+0

興味深いことに、ユーザー名は1つだけでしたか? – rreeves

+0

whoopsグループを忘れた –

1

回答https://stackoverflow.com/a/8870028/625594のように、SUM/CASEのコンビネーションを使用して目的の結果を得ることができます。

あなたのケースのために正確なクエリは次のようになります。

select system_user, 
SUM(CASE WHEN details like 'Viewed' THEN 1 ELSE 0) AS `sum1`, 
SUM(CASE WHEN details like 'Viewed Web%' THEN 1 ELSE 0) AS `sum2`, 
SUM(CASE WHEN details like 'ThumbView' THEN 1 ELSE 0) AS `sum3`, 
SUM(CASE WHEN details like 'Exported%' THEN 1 ELSE 0) AS `sum4` 
from asset_log; 
1

なしあなたはこのようにそれを書くことができます:

SELECT MAX(system_user) AS system_user, COUNT(*) 
    FROM asset_log 
    WHERE details = 'Viewed' 
    OR details like 'Viewed Web%' 
    OR details = 'ThumbView' 
    OR details like 'Exported%' 

system_userはおそらくすべて同じですので、MAX()はランダムに1つだけを取得し、集約カラムを非集約カラムと組み合わせることができないという問題を回避します。

関連する問題