SQL 聚合函数——HAVING 与 WHERE

马尔科姆

上下文:我在SQLFiddle Postgres 9.6 中摆弄 SQL 我正在尝试将聚合函数应用于外部查询中的 2 列,这些列依赖于子查询中值的存在。

我很难使用 WHERE 子句而不是 HAVING 来确定查询是否正确。SQL 会执行,但我不确定它是否会生成预期的结果。

问题:有人可以帮助我理解这是否是执行聚合的正确方法吗?如果不是,如果user_id在外部查询中包含 HAVING 需要 GROUPING BY这有点违背了目的,我该如何修改查询以获得预期的结果

预期结果:我想计算用户在进行新操作之前执行的操作数。Read Article如果用户 ( user_id) 进入下一个操作 ( View Product) 我只想计算事件的数量我将使用聚合来计算一些平均值。

示例输出: 在此处输入图片说明

询问:

SELECT event_type as action_a,
       COUNT(event_type) as action_a_count,
       COUNT(DISTINCT user_id) as unique_users
FROM events 
WHERE event_type in ('Read Article')
AND user_id in 
  (
    SELECT DISTINCT(user_id) as user_id 
    FROM events
    WHERE event_type in ('View Product')
  )
GROUP BY event_type
托尔斯滕·凯特纳

您的查询很好。WHERE event_type = 'Read Article'您过滤事件行。因此只有那些行必须被聚合。

您可以HAVING event_type = 'Read Article'改为使用,因为您也按该列分组。这意味着您将首先查找所有行的用户,然后聚合所有所需的用户行,然后才消除不需要的 event_types。这会给 DBMS 带来更多的工作要做。

结论:用于WHERE尽快减少行数,以便 DBMS 可以处理较小的数据集。这将加快您的查询。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

WHERE子句中的SQL查询聚合函数

来自分类Dev

使用where子句中的聚合函数进行sql更新

来自分类Dev

SQL查询的HAVING子句只能使用聚合函数吗?

来自分类Dev

在聚合的SQL语句中插入where条件

来自分类Dev

SQL; 函数和where子句

来自分类Dev

SQL; 函数和where子句

来自分类Dev

SQL聚合函数失败

来自分类Dev

SQL连接与聚合函数

来自分类Dev

SQL - 总和聚合函数

来自分类Dev

具有聚合功能的SQL HAVING子句?

来自分类Dev

sql视图中的递归计算错误在递归部分中不允许GROUP BY,HAVING或聚合函数

来自分类Dev

递归SQL中的聚合函数

来自分类Dev

SQL:多个嵌套的聚合函数

来自分类Dev

带集合的SQL聚合函数

来自分类Dev

按聚合函数排序 SQL

来自分类Dev

嵌套sql聚合函数的语法

来自分类Dev

向WHERE子句添加聚合函数?

来自分类Dev

用于代替WHERE子句的聚合函数的逻辑

来自分类Dev

带有where子句的聚合函数

来自分类Dev

类似于SQL函数的WHERE语句

来自分类Dev

解析函数中的sql where子句

来自分类Dev

Oracle SQL:WHERE子句中的MAX函数

来自分类Dev

SQL WHERE NOT ... IN与WHERE ... NOT IN

来自分类Dev

我可以在SQL查询中使用HAVING代替WHERE吗?

来自分类Dev

在同一SQL查询中使用WHERE,HAVING和GROUP BY

来自分类Dev

带有 Where/Having 子句的 SQL 查询案例

来自分类Dev

SQL Server中多个列上的聚合函数

来自分类Dev

SQL从聚合函数获取最小值

来自分类Dev

日期类型的SQL条件聚合函数