2

次の表があるとします。

 time_recorded        |   room   | num_occupied
 ----------------------------------------------
 2012-11-05 00:00:00       a          10
 2012-11-05 00:00:00       b          20
 2012-11-05 00:00:00       c          30
 2012-11-05 00:00:00       d          40

 2012-11-05 00:30:00       a          100
 2012-11-05 00:30:00       b          200
 2012-11-05 00:30:00       c          300
 2012-11-05 00:30:00       d          400
                     ...

room ='b'および'c'の場合、行をグループ化する必要があります。これにより、結果の出力は次のようになります。

 time_recorded        |   room   | num_occupied
 ----------------------------------------------
 2012-11-05 00:00:00       a          10
 2012-11-05 00:00:00       bc       (20+30)
 2012-11-05 00:00:00       d          40

 2012-11-05 00:30:00       a          100
 2012-11-05 00:30:00       bc      (200+300)
 2012-11-05 00:30:00       d          400
                     ...

私はjuergendによって提案された次のクエリを試しました:

SELECT 
    *
FROM 
    usage
WHERE 
    DATE(time_recorded) = '2012-11-05'
    GROUP BY CASE WHEN room IN ('b', 'c') THEN 'bc' ELSE room END;

何らかの理由で、次の結果が返されます。

 time_recorded        |   room   | num_occupied
 ----------------------------------------------
 2012-11-05 00:00:00       a          10
 2012-11-05 00:00:00       b          20

私は何が間違っているのですか?

前もって感謝します!

4

1 に答える 1

1

計算値でグループ化していますが、その値を表示していません。

の値を表示する計算フィールドとともにCASE、句にも式を配置する必要があります。このようなもの:SELECTnum_occupied

SELECT 
   time_recorded, CASE WHEN room IN ('b', 'c') THEN 'bc' ELSE room END, 
    SUM(num_occupied)
FROM 
   usage
WHERE 
    DATE(time_recorded) = '2012-11-05'
   GROUP BY 1, 2;

(コメントごとに編集)

于 2012-11-12T18:13:26.710 に答える