【问题标题】:How to Count Occurrences in a Column while including another column with unique values with SQL?如何在使用 SQL 包含具有唯一值的另一列时计算列中的出现次数?
【发布时间】:2021-08-31 02:22:39
【问题描述】:

我有一张客户表:

id order
0 25
1 25
2 23
3 24
4 25

我想查询所有客户,以及一个额外的列来计算有多少客户具有相同的订单号:

id order count
0 25 3
1 25 3
2 21 1
3 25 3
4 22 1

我试过这个语法

SELECT A.id, A.0rder, B.cnt
  FROM Customers  A
  INNER JOIN (
    SELECT Order, count(Order) as cnt
      FROM Customers 
      GROUP BY Order
  ) B ON A.Order = B.Order

并遇到此错误。 '保存查询字段时出错。不允许使用旧式 JOIN (ANSI JOIN) 语法。请使用标准语法。'

【问题讨论】:

  • SELECT A.id, A.0rder, B.cnt FROM Customers A, (SELECT Order, count(Order) as cnt FROM Customers GROUP BY Order) B ON A.Order = B.Order;除了逗号,我没有查看您的 SQL 查询。

标签: sql salesforce-marketing-cloud


【解决方案1】:

您的查询的问题是您名为order 的列也是一个关键字,例如ORDER BY。您可以使用如下所示的表别名来解决此问题:

SELECT 
    A.id, A.order, 
    B.cnt 
FROM 
    Customers A 
INNER JOIN (
  SELECT b.Order, count(b.Order) as cnt 
  FROM Customers b GROUP BY b.Order
) B ON A.Order = B.Order;
id order cnt
0 25 3
1 25 3
2 23 1
3 24 1
4 25 3

View on DB Fiddle

您也可以使用窗口函数 COUNT 在订单列上进行分区或使用相关查询来实现此目的。这两种方法都包含在下面。

查询 #1 - 窗口函数

SELECT
    t1.*,
    COUNT(1) OVER (PARTITION BY t1.order) as count
FROM
    my_table t1
ORDER BY 
    t1.id;
id order count
0 25 3
1 25 3
2 23 1
3 24 1
4 25 3

查询 #2

SELECT
    t1.*,
    (
        SELECT COUNT(1) FROM my_table t2 WHERE t2.order=t1.order
    ) as count
FROM
    my_table t1
ORDER BY 
    t1.id;
id order count
0 25 3
1 25 3
2 23 1
3 24 1
4 25 3

View Demo on DB Fiddle

让我知道这是否适合你。

【讨论】:

  • 谢谢@ggordon!!!查询 #1 - 窗口函数成功了。
  • 太棒了!请投票并将其标记为答案,以便其他有类似问题的 stackoverflow 用户会发现它很有用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-19
  • 2016-11-11
相关资源
最近更新 更多