1

我有一个查询,它应用 MySQL 的 GROUP BY 函数来计算给定会话上发生的事件数。会话以 1 为增量增加。因此,结果可能如下所示。

session events
100     10
101     15
102     29
103     15
104     2

当给定会话中没有任何事件时,就会出现问题。因此,想象一下,在会话 102 中包含 0 个观测值,而不是包含 29 个观测值。结果如下所示。

session events
100     10
101     15
103     15
104     2

什么技术会强制 GROUP BY 识别会话 102 中的 0 个事件,并且结果看起来像这样?即,用 0 个事件报告会话 102。

session events
100     10
101     15
102     0
103     15
104     2
4

2 回答 2

1

您可以 LEFT JOIN 到另一个表,其中包含您感兴趣的所有会话。通过使用 LEFT JOIN,您可以确保“其他”表中的所有结果都出现在结果中。

例如对于一张source桌子:

>    SOURCE_SESSION
>     100
>     101
>     102
>     103
>     104
>     ...

你会写类似的东西

SELECT SOURCE_SESSION, sum(events)
FROM   source
LEFT JOIN my_table on source.SOURCE_SESSION = my_table.session
GROUP BY source.SOURCE_SESSION

您的里程可能会有所不同,但这是一般的想法。

于 2013-03-28T19:35:17.227 回答
0

如果没有架构或当前查询,这是推测。

假设您有两张桌子,一张是会话,另一张是活动。您可以LEFT JOIN会话到事件以包括没有事件的会话。现在,当您按会话 ID 分组并计算事件时,您将获得包括零事件的会话的结果。

于 2013-03-28T19:35:29.930 回答