在 MySQL 中使用 CASE on COUNT



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

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

  2. 我想根据出场次数将每个计数乘以一个数字。因此,如果一个名字出现一次,乘以 2,如果出现两次,乘以 3 依此类推。

  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))

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

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

这应该可以满足您的需求。 您只需要确保涵盖每种情况即可。

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

最新更新