3

一度に 1 日から複数の請求のステータスを表示しようとしています。たとえば、「date1」には 3 つのクレームがあります。各請求には異なるステータスがあります。「date1」内のすべてのクレームのステータス カウントを表示するにはどうすればよいですか。つまり、結果を最も古い日付から最新の日付に並べ替え、3 つの列に、その日からそのステータスを持つ請求の数をカウントしたいと考えています。3 つのステータス列を合計すると、その日のクレームの合計数になります。これが私が望むものです: (St1 - St3 は固有のステータスを表します)

Date      St1 St2 St3
12-02-12 | 1 | 2 | 3
12-03-12 | 2 | 5 | 3
12-04-12 | 7 | 3 | 8

私が作業を開始したクエリは次のように見えますが、完全に間違っています。

SELECT dates, statuses, COUNT(*) AS St1 FROM table_dates GROUP BY dates;

これは、1 つのステータスのみのカウントを取得するための私の試みでした。私はどこかから始めなければならないと考えました。ありがとうございました。

4

2 に答える 2

3

GROUP BY にステータスを追加します。

SELECT dates, status, COUNT(*) AS cnt
FROM table_dates
GROUP BY dates, status

これにより、あなたが求めたものとはわずかに異なる形式で結果が得られます。

日付 | ステータス | cnt
2012-12-02 | 1 | 1
2012-12-02 | 2 | 2
2012-12-02 | 3 | 3
2012-12-03 | 1 | 2
2012-12-03 | 2 | 5
2012-12-03 | 3 | 3
2012-12-04 | 1 | 7
2012-12-04 | 2 | 3
2012-12-04 | 3 | 8

後で新しいステータスを追加する場合、データベース スキーマ、SQL クエリ、またはクライアント コードを変更する必要がないため、これはおそらくより適切な形式です。

于 2012-06-29T19:27:38.660 に答える
2

あなたができることは次のようなものです:

SELECT SUM(if(statuses = st1,1,0)) as st1, 
SUM(if(statuses = st2,1,0)) as st2, 
SUM(if(statuses = st3,1,0)) as st3 
    FROM table_dates 
    GROUP BY dates;
于 2012-06-29T19:30:46.343 に答える