微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用计算“特定客户的查询次数”?

如何解决如何使用计算“特定客户的查询次数”?

我有一张名为“ Anfrage”的表。这些是“ Anfrage表”中的列:

Anfrage Table

我想计算一下同一位顾客进行咨询的次数。因此,我创建了一个新列“ Menge_Anfrage”,该列表示查询数量。结果应该是这样的:

Table Result

我尝试使用此查询

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

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

解决方法

您似乎想计算KundenNr发生的次数。您的表不需要为此添加新列;您应该在查询中每次进行计算:

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和表中的行之间的连接是自动的,那么您应该能够理解顶部的查询。

这是另一种写同一件事的方法:

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

您可以认为oracle将对输出中的每一行运行select中显示的子查询。从逻辑上讲,这等效于运行分组查询,然后联接结果,或创建将KundenNr映射为Count的分区哈希表,然后在准备结果时将它们进行匹配

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。