与 Excel countif 等效的 SQL 语句

问题描述 投票:0回答:1

我有一列名为“cardnum”,另一列名为 amount。 (实际上,表中还有多个其他字段,但我将坚持使用两个作为示例)

例如,

cardnum 金额
ABC123 50
ABC123 20
ABC123 30
ABC123 50
XYZ720 24
LFG475 35
LFG475 100
LFG475 0
ABC123 50
ABC123 20

是否有一个SQL语句返回一个新列,其中包含卡号列中每个卡号各自的计数?

它应该看起来像这样:

cardnum 金额
ABC123 50 6
ABC123 20 6
ABC123 30 6
ABC123 50 6
XYZ720 24 1
LFG475 35 3
LFG475 100 3
LFG475 0 3
ABC123 50 6
ABC123 20 6

我尝试了这样的方法(请记住,我将其应用于包含 17 列的整个表格):

SELECT card_number, COUNT(*) as frequency
FROM your_table_name
GROUP BY card_number;

我也尝试使用

COUNT(*) OVER(PARTITION BY...)
但它只返回整个新列的所有总行数。

但显然你不能将 groupby 与

*
一起使用,或者所有列都必须是
groupby
的一部分或包含在聚合函数中。

sql sql-server group-by count countif
1个回答
0
投票

我们可以使用以下 SQL SERVER 查询来获取您想要的输出。

SELECT A.*, B.frequency FROM carddetails A
LEFT OUTER JOIN
(SELECT cardnum, COUNT(1) frequency FROM carddetails GROUP BY cardnum) B
ON A.cardnum=B.cardnum

我们正在使用 GROUP BY 和 COUNT 函数计算频率。 我们可以通过在原始表上应用 JOIN 与结果集来填充频率。

我们可以在DBFiddle上检查我的执行和输出。

注意:- 当我使用 INNER JOIN 时,它对 cardnum 上的输出进行排序。 LEFT OUTER JOIN 没有改变任何顺序。

© www.soinside.com 2019 - 2024. All rights reserved.