在MySQL中的COUNT上使用CASE

时间:2017-04-05 14:21:26

标签: mysql count sum case

我有一张类似于此的表格(mytable):

Names
-----
John  
Harry 
James
Harry 
John
James 
Harry 
Billy 
  1. 我想计算每个名字出现的次数。

  2. 我想根据出现次数将每个计数乘以一个数字。因此,如果名称出现一次,则乘以2,如果它出现两次,则乘以3等。

  3. 然后我想要所有这些输出值。

  4. 这将是我想要的输出:

    Names | numbers_count | multiplied
    ----------------------------
    John  | 2             | 6
    Harry | 3             | 12
    James | 2             | 6
    Billy | 1             | 2
    
    SUM =  26
    

    到目前为止,我有这个,我想我需要使用CASE函数,然后大概是SUM函数,但我失败了!我尝试过使用局部变量,但无济于事。

    SELECT
    Names,
    COUNT(Names) AS number_count
    
    FROM mytable
    
    GROUP BY Names
    

    例如,使用这种方法可以采用分层定价模式。

    编辑:非常感谢Juan Carlos Oropeza,你是对的。但是,我应该更好地提出这个问题。我正在处理的真正问题需要一个像以下的系统:

    IF (1 <= numbers_count <= 3) multiplied=(numbers_count*2) 
    IF (4 <=numbers_count <= 6) multiplied=((3*2)+((numbers_count-3)*3))
    

    所以我想在这个例子中使用CASE功能,所以我可以将它应用于这个问题。

2 个答案:

答案 0 :(得分:1)

SELECT 
    *,
    COUNT(Names) AS COUNT_OF_N,
    CASE WHEN COUNT(Names) <= 3
             THEN COUNT(Names) * 2
         WHEN COUNT(Names) <= 6
             THEN COUNT(Names) * 3 
    END AS Multiplied
FROM
    mytable
GROUP BY
    Names

这应该做你需要的。您必须确保涵盖所有案例。

答案 1 :(得分:0)

SELECT
    Names,
    COUNT(Names) AS number_count,
    COUNT(Names) * (COUNT(Names) + 1) AS multiplied
FROM mytable    
GROUP BY Names

对于总和,您需要另一个查询

SELECT SUM(multiplied)
FROM (    
        SELECT
            Names,
            COUNT(Names) AS number_count,
            COUNT(Names) * (COUNT(Names) + 1) AS multiplied        
        FROM mytable    
        GROUP BY Names
     ) T