1

MySQL の GROUP BY 関数を適用して、特定のセッションで発生したイベントの数をカウントするクエリがあります。セッションは 1 ずつ増加します。したがって、結果は次のようになります。

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

特定のセッションにイベントがない場合、問題が発生します。したがって、セッション 102 に 29 個の観測が含まれているのではなく、0 個の観測が含まれていると想像してください。結果は次のようになります。

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

スキーマまたは現在のクエリがなければ、これは憶測です。

セッションと他のイベントを含む 2 つのテーブルがあるとします。LEFT JOINイベントへのセッションに、イベントのないセッションを含めることができます。セッション ID でグループ化してイベントをカウントアップすると、イベントがゼロのセッションを含む結果が得られます。

于 2013-03-28T19:35:29.930 に答える