[英]Multiple Count On Same Column with Where like - MySQL
我試圖在同一列上對不同的where子句進行多次計數。
我已經找出了每個like子句的基本查詢,但是我需要將它們組合起來產生一個結果。
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;
謝謝!
您可以使用SUM / Case來“轉動”計數
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 / CASE的組合來實現所需的結果,如答案https://stackoverflow.com/a/8870028/625594 。
對於您的情況,確切的查詢將是:
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;
你可以像這樣寫:
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()
將隨機獲得一個,並且它解決了無法將聚合列與非聚合列組合的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.