1
create table t (
  `place_id` int(11) NOT NULL ,
  `area_sq` int (11) NOT NULL,
  `nxx` int(11) NOT NULL
);
insert into t values(1, 50, 1);
insert into t values(2, 90, 2);
insert into t values(2, 20, 1);
insert into t values(2, 10, 0);
insert into t values(2, 10, 1);
insert into t values(3, 10, 3);


| PLACE_ID | AREA_SQ | NXX |
|----------|---------|-----|
|        1 |      50 |   1 |
|        2 |      90 |   2 |
|        2 |      20 |   1 |
|        2 |      10 |   0 |
|        2 |      10 |   1 |
|        3 |      10 |   3 |

上記はtと呼ばれる私のテーブルです。次の結果を得る必要があります

| PLACE_ID | SUM(AREA_SQ) |nxx |
|----------|--------------|----|
|        1 |           50 |   1|
|        2 |          100 |   2|
|        2 |           40 |   1|
|        3 |           10 |   3|

nxx = 0の場合、同じnxxのarea_sqの合計とarea_sqの合計が必要です

私の現在のクエリはこのようなものです。しかし、nxx=0 の場合、area_sq の合計を別の行にするのではなく、nxx=0 の場合に sum(area_sq) を他の行に追加します。したがって、nxx でグループ化することもできますが、nxx=0 の場合、area_sq を他の nxx 値に追加する必要があります。間違った英語で本当に申し訳ありません。さまざまなことを試しましたが、どれも成功しませんでした。前もって感謝します。

select place_id,sum(area_sq) from t group by place_id,nxx
4

1 に答える 1

3

の総和を個別に計算する追加のサブクエリを結合することができますnxx = 0

SELECT  t.PLACE_ID, 
        SUM(t.AREA_SQ) + COALESCE(s.AREA_SQ,0) totalSum, 
        NXX
FROM    t LEFT JOIN 
        (
            SELECT  PLACE_ID, SUM(AREA_SQ) AREA_SQ
            FROM    t 
            WHERE   NXX = 0
            GROUP   BY PLACE_ID
        ) s ON t.PLACE_ID = s.PLACE_ID
WHERE   NXX <> 0
GROUP   BY t.PLACE_ID, NXX
ORDER   BY t.PLACE_ID, totalSum DESC
于 2013-09-10T03:19:28.790 に答える