我正在尝试使用不同的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;
谢谢!
答案 0 :(得分:5)
您可以使用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
注意:如果没有外卡,我就不会使用“赞”
答案 1 :(得分:1)
您可以使用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;
答案 2 :(得分: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()
只会随机获得一个,并且它解决了无法将聚合列与非聚合列组合的问题。