2

次の表があります。

+----+------------+----------------------+------------------+
| | ID | created_at | プラットフォーム | platform_version |
+----+------------+----------------------+------------------+
| | 1 | 1 | マック | 1 |
| | 2 | 2 | マック | 1 |
| | 3 | 3 | マック | 2 |
| | 4 | 4 | マック | 2 |
| | 5 | 5 | マック | 2 |
| | 6 | 5 | マック | 3 |
| | 7 | 2 | 窓 | 1 |
| | 8 | 2 | 窓 | 2 |
| | 9 | 3 | 窓 | 3 |
| | 10 | 3 | 窓 | 1 |
| | 11 | 4 | 窓 | 2 |
| | 12 | 4 | 窓 | 3 |
| | 13 | 5 | 窓 | 4 |
| | 14 | 5 | 窓 | 1 |
| | 15 | 6 | 窓 | 2 |
| | 16 | 6 | 窓 | 3 |
+----+------------+----------------------+------------------+

次のような結果が欲しいです。

+-------------+---------------+---------------+--- ----------+
| | グループ数 | 実行中の合計 | windows_total | created_at |
+-------------+---------------+---------------+--- ----------+
| | 1 | 1 | 0 | 1 |
| | 6 | 7 | 4 | 2 |
| | 7 | 14 | 8 | 4 |
| | 2 | 16 | 10 | 6 |
+-------------+---------------+---------------+--- ----------+

しかし、この select ステートメントを実行すると:

group_count を選択し、
       (@r := @r + group_count ) AS running_total,
       (@w := @w + ifnull( win_count, 0 )) AS windows_total,
       t1.created_at
FROM (SELECT (@r :=0),
                COUNT( * ) AS group_count、
                プラットホーム、
                created_at
       FROM デバイス
       GROUP BY created_at DIV 2
      ) AS t1 左結合
      (SELECT COUNT( * ) AS win_count,
                created_at
       FROM デバイス
       WHERE プラットフォーム = 'windows'
       GROUP BY created_at DIV 2
      ) AS t3 ON t1.created_at = t3.created_at

次のようになります。

+-------------+---------------+---------------+--- ----------+
| | グループ数 | 実行中の合計 | windows_total | created_at |
+-------------+---------------+---------------+--- ----------+
| | 1 | 1 | ヌル | 1 |
| | 6 | 7 | ヌル | 2 |
| | 7 | 14 | ヌル | 4 |
| | 2 | 16 | ヌル | 6 |
+-------------+---------------+---------------+--- ----------+

合体も効かない。誰でも助けてもらえますか?ありがとう。

4

1 に答える 1

0

記録のために、@eggyalの回答を引用します。

@w は最初は NULL であるため、IFNULL の結果 (その結果が何であれ) に追加すると NULL が生成されます。
@r で行ったように、副選択で初期値を指定します

SELECT group_count,
       (@r := @r + group_count ) AS running_total,
       (@w := @w + ifnull( win_count, 0 )) AS windows_total,
       t1.created_at
FROM  (SELECT   (@r:= 0),(@w:= 0),
                COUNT(*) AS group_count,
                platform,
                created_at
       FROM     devices
       GROUP BY created_at DIV 2
      ) AS t1 LEFT JOIN
      (SELECT   COUNT( * ) AS win_count,
                created_at
       FROM     devices
       WHERE    platform = 'windows'
       GROUP BY created_at DIV 2
      ) AS t3 ON t1.created_at = t3.created_at

これで問題は解決するはずです。

于 2012-07-22T23:09:21.937 に答える