如何使用计数"how many times a particular customer made inquiries"?

How to use count "how many times a particular customer made inquiries"?

我有这个 table 叫做“Anfrage”。这些是“Anfrage Table”中的列:

Anfrage Table

我想统计同一个客户咨询了多少次。所以我做了一个新的列“Menge_Anfrage”,意思是查询数量。结果应该是这样的:

Table Result

我尝试使用这个查询:

 `SELECT DISTINCT Count(*)
FROM Anfrage
WHERE KundenNr = 1
) AS "Menge Anfrage",`

但它 returns 在“Menge Anfrage”列的所有行中都是“4”。有人可以告诉我正确的查询吗?我正在使用 SQL 工具 1,8 b38。非常感谢。

您似乎想统计 KundenNr 出现的次数。您的 table 不需要为此添加新列;你应该每次在查询中计算它:

SELECT
  KundenNr,
  Project,
  COUNT(*) OVER(PARTITION BY KundenNr) as Menge_Anfrage
FROM
  Anfrage

上面的查询等效于此查询,适用于不支持分析功能的数据库:

SELECT
  a.KundenNr,
  a.Project,
  x.Menge_Anfrage
FROM
  Anfrage a
  INNER JOIN (SELECT KundenNr, COUNT(*) as Menge_Anfrage FROM Anfrage GROUP  BY KundenNr) x 
  ON a.KundenNr = x.KundenNr

OVER(PARTITION BY KundenNr) 几乎完成了底部查询的 GROUP BY 子查询所做的工作;它根据不同的 KundenNr 值将数据集分成多个分区(组),并且 COUNT(*) 适用于分区,而不是整个数据集。研究并理解底部查询的工作原理,然后如果您记住分区 kundennr 和来自 table 的行之间的连接是自动的,那么您应该能够理解顶部的查询。

这里有另一种写法:

SELECT
  a.KundenNr,
  a.Project,
  (SELECT COUNT(*) FROM Anfrage x WHERE x.KundenNr = a.KundenNr) as Menge_Anfrage
FROM
  Anfrage a

您可以认为 oracle 会为输出中的每一行 运行 select 中显示的子查询。这在逻辑上等同于 运行 进行分组查询然后加入结果,或者创建分区哈希 table 将 KundenNr 映射到 Count 然后在准备结果时匹配它们