遍历子查询结果以查询同一张表

Xandor

我有一个包含用户事件数据的表。有些条目是收益事件,有些条目是负荷事件。加载事件的URL包含URL参数,收入事件和加载事件的URL都附加有session_id和user_id数据。我编写了一个查询,该查询将根据过去45天负载事件的URL参数从该表中提取用户和会话ID,然后我希望查找具有匹配用户和会话ID的收入事件并将其总计。这是我的第一个查询:

SELECT user_id, session_id 
FROM events
WHERE event_type = 'load'
  AND client_id = 1234
  AND calling_url LIKE '%utm_source=so%'
  AND server_stamp BETWEEN DATE_SUB(NOW(), INTERVAL ? DAY) AND NOW()

从单个用户获得收入的查询将是这样的:

SELECT SUM(revenue_subtotal)
FROM events 
WHERE event_type = 'revenue'
  AND client_id = 1234
  AND user_id = 'thisUUID'
  AND session_id = 'thisSID'

因此,我试图找到一种方法来链接这两个查询,以总结直接从SQL中的第一个查询返回的所有用户/会话ID组合的收入(全部在一个完整查询中)。

不幸的是,该表有很多列,因此很难在SO上描述完整的表定义和完整的样本数据,但是我认为我已经很好地阐明了这一点。不过,请让我知道是否需要更多信息或如何实现此目的。截至目前,我唯一的方法是获取PHP中第一个查询的结果,然后针对返回的每一行循环执行一个新查询,但这很容易达到成千上万个,因此我尝试保留所有内容如果可能的话,在SQL中使用。

缺口

没有示例数据,很难100%确定,但是您应该能够对进行自联接client_iduser_idsession_id获得所需的数据:

SELECT e1.user_id, e1.session_id, COALESCE(SUM(e2.revenue_subtotal), 0) AS revenue
FROM events e1
LEFT JOIN events e2 ON e2.client_id = e1.client_id
                   AND e2.session_id = e1.session_id
                   AND e2.user_id = e1.user_id
                   AND e2.event_type = 'revenue'
WHERE e1.event_type = 'load'
  AND e1.client_id = 1234
  AND e1.calling_url LIKE '%utm_source=so%'
  AND e1.server_stamp BETWEEN DATE_SUB(NOW(), INTERVAL ? DAY) AND NOW()    
GROUP BY e1.user_id, e1.session_id

请注意,我们使用a,LEFT JOIN以便在没有revenue事件的COALESCE情况下仍然可以得到结果,并在这些情况下使输出为0。

还要注意,您需要GROUP BY在该查询上有一个子句来分隔每个事件的结果。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MySQL子查询在同一张表上

来自分类Dev

多次查询同一张表

来自分类Dev

多次查询同一张表

来自分类Dev

MySql从同一张表和其他表中合并了多个查询的选择结果

来自分类Dev

如何从同一张表的单个MySQL查询中获取两组结果?

来自分类Dev

PostgreSQL查询结果取决于同一张表的几行

来自分类Dev

如何在Hibernate的同一张表上执行子查询?

来自分类Dev

使用选择子查询将列更新到同一张表

来自分类Dev

在同一张表中的联接查询

来自分类Dev

将查询结果存储到一张表中

来自分类Dev

如何将SELECT查询的每个结果的三个新行插入同一张表

来自分类Dev

同一张表的Acumatica BQL查询不止一次

来自分类Dev

同一张表的Acumatica BQL查询不止一次

来自分类Dev

MySQL:在同一张表上有内部查询引用外部列

来自分类Dev

如何在MySQL查询的同一张表上同时执行插入和选择操作?

来自分类Dev

查询可以使用同一张表中的多个索引吗?

来自分类Dev

如何通过口才查询生成器在与同一张表的关系上使用whereHas?

来自分类Dev

如何在Progess OpenEdge Procedure中两次查询同一张表?

来自分类Dev

在联接查询中多次引用同一张表中的记录?

来自分类Dev

同一张表的多个选择查询,这是怎么回事?

来自分类Dev

MySQL查询内部联接在不同条件下的同一张表上

来自分类Dev

MySQL:如何在单个查询的同一张表中进行选择和删除?

来自分类Dev

SQL查询可在同一张表中找到最大的价值

来自分类Dev

从同一张表中提取两个查询

来自分类Dev

根据查询将表列更新到同一张表

来自分类Dev

如何使用Linq to Entities查询同一张表中的存在和不存在

来自分类Dev

从一张表中选择:单行子查询返回多于一行

来自分类Dev

SQL-根据查询结果从一张表中获取计数

来自分类Dev

在同一张桌子上多次查询

Related 相关文章

  1. 1

    MySQL子查询在同一张表上

  2. 2

    多次查询同一张表

  3. 3

    多次查询同一张表

  4. 4

    MySql从同一张表和其他表中合并了多个查询的选择结果

  5. 5

    如何从同一张表的单个MySQL查询中获取两组结果?

  6. 6

    PostgreSQL查询结果取决于同一张表的几行

  7. 7

    如何在Hibernate的同一张表上执行子查询?

  8. 8

    使用选择子查询将列更新到同一张表

  9. 9

    在同一张表中的联接查询

  10. 10

    将查询结果存储到一张表中

  11. 11

    如何将SELECT查询的每个结果的三个新行插入同一张表

  12. 12

    同一张表的Acumatica BQL查询不止一次

  13. 13

    同一张表的Acumatica BQL查询不止一次

  14. 14

    MySQL:在同一张表上有内部查询引用外部列

  15. 15

    如何在MySQL查询的同一张表上同时执行插入和选择操作?

  16. 16

    查询可以使用同一张表中的多个索引吗?

  17. 17

    如何通过口才查询生成器在与同一张表的关系上使用whereHas?

  18. 18

    如何在Progess OpenEdge Procedure中两次查询同一张表?

  19. 19

    在联接查询中多次引用同一张表中的记录?

  20. 20

    同一张表的多个选择查询,这是怎么回事?

  21. 21

    MySQL查询内部联接在不同条件下的同一张表上

  22. 22

    MySQL:如何在单个查询的同一张表中进行选择和删除?

  23. 23

    SQL查询可在同一张表中找到最大的价值

  24. 24

    从同一张表中提取两个查询

  25. 25

    根据查询将表列更新到同一张表

  26. 26

    如何使用Linq to Entities查询同一张表中的存在和不存在

  27. 27

    从一张表中选择:单行子查询返回多于一行

  28. 28

    SQL-根据查询结果从一张表中获取计数

  29. 29

    在同一张桌子上多次查询

热门标签

归档