0

私は現在、次のようなテーブルを持っています、

Column      Type
time        datetime             
ticket      int(20)              
agentid     int(20)              
ExitStatus  varchar(50)      
Queue       varchar(50)

これを週ごとに分類し、各ExitStatusのカウントを列に提供するクエリを作成したいと思います。これまでのところ、私はこれを持っています、

SELECT ExitStatus,COUNT(ExitStatus) AS ExitStatusCount, DAY(time) AS TimePeriod 
FROM `table` 
GROUP BY TimePeriod, ExitStatus

出力:

ExitStatus ExitStatusCount TimePeriod
NoAgentID                1          4 
Success                  3          4
NoAgentID                1          5
Success                  5          5

これを変更して、次の形式で結果が返されるようにします。

week | COUNT(NoAgentID) | COUNT(Success) | 

理想的には、他のExitStatus値が可能である可能性があるため、列を動的にする必要があります。

この情報はフォーマットされ、ページ上のテーブルでエンドユーザーに表示されます。これはSQLで実行できますか、それともPHPで再フォーマットする必要がありますか?

4

3 に答える 3

0

単一のクエリで達成できる問題に対する「一般的な」解決策 (クロス集計と呼ばれる) はありません。考えられる解決策は次の 4 つです。

  • 可能なすべてExitStatusの 'es をクエリにハードコーディングし、それらの必要性に応じて最新の状態に保ちます。例えば:
選択する
    日 (時間) AS TimePeriod、
    SUM(IF(ExitStatus = 'NoAgentID', 1, 0)) AS NoAgentID,
    SUM(IF(ExitStatus = '成功', 1, 0)) AS 成功
    -- #TODO: 必要に応じてここに他のユーザーを追加します
FROM テーブル
どこ ...
GROUP BY TimePeriod
  • 最初のクエリを実行して可能なすべてExitStatusの 'es を取得し、次にそれらの結果に基づいて高級プログラミング言語から最終的なクエリを作成します。

  • 高水準プログラミング言語でクロス集計用の特別なモジュールを使用します。Perl の場合はSQLCrossTab モジュールがありますが、PHP のモジュールは見つかりませんでした

  • Pentahoのような OLAP (データの多次元ビュー) を使用してアプリケーションに別のレイヤーを追加し、元のデータの代わりにそのレイヤーにクエリを実行します。

これらのソリューションと主題の全体的な議論についてもっと読むことができます

于 2012-06-05T02:31:13.847 に答える
0

これは 1 つの方法です。SUM()特定の条件が真であるアイテムの数をカウントするために使用できます。最後に、通常どおり時間でグループ化します。

SELECT DAY(time) AS TimePeriod, 
  SUM('NoAgentID' = exitStatus) AS NoAgentID, 
  SUM('Success' = exitStatus) AS Success, ...
FROM `table` 
GROUP BY TimePeriod

出力:

4 1 3
5 1 5

ただし、ここの列は動的ではありません。つまり、進行中に条件を追加する必要があります。

于 2012-06-05T02:24:16.237 に答える
0
SELECT week(time) AS week,
        SUM(ExitStatus = 'NoAgentID') AS 'COUNT(NoAgentID)',
        SUM(ExitStatus = 'Success') AS 'COUNT(Success)'
FROM `table`
GROUP BY week

ExitStatus 列がどのように機能するかについて、いくつか推測しています。また、「週」の解釈には、年の週、月の週、四半期など、さまざまな方法があります。適切な関数を配置する必要があります。

于 2012-06-05T02:24:48.817 に答える