2

タイムスタンプがシリアル番号で分類された製品に関するデータを含む 3 つの mysql テーブルがあります。

日付ごとに、各テーブルに個別のシリアル番号エントリがいくつあるかを表示したいと思います。

表1:

serial       timestamp

1               7/7/13
2               7/7/13
3               7/8/13
4               7/9/13
5               7/9/13
6               7/9/13

表 2:

serial        timestamp
1               7/6/13
2               7/7/13
3               7/8/13
4               7/9/13

表 3:

serial        timestamp
1                7/9/13
2                7/10/13
3                7/10/13

出力は次のようになります。

date      table1      table2       table3
7/6/13      0           1            0
7/7/13      2           1            0
7/8/13      1           1            0
7/9/13      3           1            1
7/10/13     0           0            2
Total       6           4            3

これを行い、これを PHP 経由で html に表示する最もエレガントな方法を探しています。3 つのテーブルの中で最も早い日付で出力テーブルを開始し、3 つのテーブルで最も遅い日付で終了する必要があります。

4

2 に答える 2

1

最初にすべてのデータを 1 つの派生テーブルにマージしてから、そのテーブルをピボットする必要があります。

SELECT timestamp,
  COUNT(CASE WHEN tableNumber = 1 THEN tableNumber END) table1Total,
  COUNT(CASE WHEN tableNumber = 2 THEN tableNumber END) table2Total,
  COUNT(CASE WHEN tableNumber = 3 THEN tableNumber END) table3Total
FROM (
  SELECT timestamp, 1 tableNumber FROM table1
  UNION ALL
  SELECT timestamp, 2 FROM table2
  UNION ALL
  SELECT timestamp, 3 FROM table3
) c
GROUP BY timestamp

出力:

|     TIMESTAMP | TABLE1TOTAL | TABLE2TOTAL | TABLE3TOTAL |
|---------------|-------------|-------------|-------------|
| July, 06 2013 |           0 |           1 |           0 |
| July, 07 2013 |           2 |           1 |           0 |
| July, 08 2013 |           1 |           1 |           0 |
| July, 09 2013 |           3 |           1 |           1 |
| July, 10 2013 |           0 |           0 |           2 |

ここでフィドル。

オプションWITH ROLLUPで の後に追加しGROUP BYて、合計を表示します。

于 2013-11-09T04:17:16.213 に答える
0

使用COUNTしてGROUP BY

    SELECT 
        `timestamp`
         COUNT( * ) as numEntries
    FROM
         tbl
    GROUP BY
        `timestamp`
于 2013-11-09T04:14:12.033 に答える