我有一个类似于这样的表(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))
所以我想在这个例子中使用 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