MySQL中的计数用例

MySQL中的计数用例,mysql,count,sum,case,Mysql,Count,Sum,Case,我有一个类似于此的表(mytable): Names ----- John Harry James Harry John James Harry Billy 我想计算每个名字出现的次数 我想将每个计数乘以一个数字,这取决于出现的次数。如果一个名字出现一次,乘以2,如果它出现两次,乘以3等等 然后我想将所有这些输出值相加 这将是我想要的输出: Names | numbers_count | multiplied ---------------------------- John

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

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

  • 我想将每个计数乘以一个数字,这取决于出现的次数。如果一个名字出现一次,乘以2,如果它出现两次,乘以3等等

  • 然后我想将所有这些输出值相加

  • 这将是我想要的输出:

    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
    
    例如,可以在分层定价模型中使用该方法

    编辑:非常感谢你的回答胡安·卡洛斯·奥罗佩扎,你是对的。然而,我本应该更好地提出这个问题。我正在处理的真正问题需要一个系统,如:

    IF (1 <= numbers_count <= 3) multiplied=(numbers_count*2) 
    IF (4 <=numbers_count <= 6) multiplied=((3*2)+((numbers_count-3)*3))
    
    IF(1)
    对于总和,您需要另一个查询

    SELECT SUM(multiplied)
    FROM (    
            SELECT
                Names,
                COUNT(Names) AS number_count,
                COUNT(Names) * (COUNT(Names) + 1) AS multiplied        
            FROM mytable    
            GROUP BY Names
         ) T
    
    选择
    *,
    将(姓名)计数为N的计数,
    
    案例计数(姓名)非常感谢您的快速回答,真是太好了,您是对的。但是,我应该提出更好的问题。我正在研究的真正问题需要一个类似于:IF(1)的系统
    SELECT SUM(multiplied)
    FROM (    
            SELECT
                Names,
                COUNT(Names) AS number_count,
                COUNT(Names) * (COUNT(Names) + 1) AS multiplied        
            FROM mytable    
            GROUP BY Names
         ) T
    
    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