我有一张类似于此的表格(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
例如,使用这种方法可以采用分层定价模式。
编辑:非常感谢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功能,所以我可以将它应用于这个问题。
答案 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