如何使用SQL组合和计数具有不同值的多个行

时间:2015-07-20 19:19:23

标签: mysql sql

我已经看到多个场景,您将多个行组合在一起,但是我们无法找到可以将多个行组合在一起的不同值。如果我有一个包含源和附带日期的表,我想获得每个源的日期计数,然后按选择的几个值对源进行分组。示例如下:

当前

//button[contains(., "search")]

所需

  Source                Count
  Yahoo                 10
  Bing                  15
  Google                12
  Paid                  10
  Organic               15  

4 个答案:

答案 0 :(得分:1)

SELECT case when source in ('Yahoo','Bing','Google') then 'Media' 
            else Source end as Source,  sum(count) as count
GROUP BY case when source in ('Yahoo','Bing','Google') then 'Media' 
            else Source end 

答案 1 :(得分:0)

select case when source not in ('Paid','Organic') 
            then 'Media'
            else source
       end as my_source, 
       count(*)
from your_table
group by my_source

答案 2 :(得分:0)

人们提出的大部分内容都是正确的。 但是由于“计数”他们认为它是一个函数而不是一个变量,所以他们已经变得很困惑。 根据您的数据,您可以衡量和分组营销来源。

以下是您需要的查询。

    select 
case 
when Source  in ('Yahoo','Bing','Google') then 'Media'
else Source
end as 'Source',
case 
when Source  in ('Yahoo','Bing','Google') then (Select sum(Count) from your_table where source in  in ('Yahoo','Bing','Google'))
else Count
end as 'Count'
from your_table
group by 'Source'

答案 3 :(得分:0)

这种方法比其他方法略有改进,因为它将您的分组逻辑放入外部应用中,并使用" "运算符,以便它引用回基本查询。这允许在一个地方陈述和维护逻辑,使代码也更容易阅读。不确定MySQL是否支持" "运营商,但值得一试......

select [Source Group], 
       count(*)
from your_table as S
outer apply (select case when s.source not in ('Paid','Organic') 
            then 'Media'
            else s.source
            end 
        as [Source Group])_ 
group by [Source Group]