同一列上的多个计数与哪里 - MySQL

时间:2012-01-19 18:44:41

标签: mysql count

我正在尝试使用不同的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; 

谢谢!

3 个答案:

答案 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()只会随机获得一个,并且它解决了无法将聚合列与非聚合列组合的问题。

相关问题