-1

私のクエリから私は得る:

----------
| Val  |  Avg |
----------
|  1   |   7  |
----------
|  5   |   7  |
----------
|  2   |   7  |
----------
|  5   |   7  |
----------
|  6   |   7  |
----------
|  5   |   7  |

上記がいくつかのテーブル「t」にあると仮定します。値が対応する平均よりも小さい行が 3 つ以上あるかどうかを確認したい。その条件を満たすポイントが 3 つ以上ある場合は、次のような結果で強調表示されます。

----------
|  Val |  Avg | BelowAvg |
----------
|  8   |   7  |     0    |
----------
|  7   |   7  |     0    |
----------
|  9   |   7  |     0    |
----------
|  5   |   7  |     1    |
----------
|  6   |   7  |     1    |
----------
|  5   |   7  |     1    |

助言がありますか?

4

1 に答える 1

2

これは、以前のデータで機能します。の別のセットの平均が同じになると、問題が発生しますVAL

SQL フィドル

MS SQL Server 2012 スキーマのセットアップ:

CREATE TABLE t
    ([Val] int, [Avg] int)
;

INSERT INTO t
    ([Val], [Avg])
VALUES
    (1, 3),
    (5, 3),
    (2, 3),
    (5, 7),
    (6, 7),
    (5, 7)
;

クエリ 1 :

SELECT t.*, 
       CASE WHEN t2.cnt >= 3 THEN 1 ELSE 0 END as BelowAvg 
FROM t
LEFT OUTER JOIN (SELECT avg, count(*) as cnt
            FROM t
            WHERE val < avg
            GROUP BY avg) t2 ON t.avg = t2.avg

結果

| VAL | AVG | BELOWAVG |
|-----|-----|----------|
|   1 |   3 |        0 |
|   5 |   3 |        0 |
|   2 |   3 |        0 |
|   5 |   7 |        1 |
|   6 |   7 |        1 |
|   5 |   7 |        1 |

編集:これが質問に関連していると仮定すると、次のようなものを持つことができます:

SQL フィドル

MS SQL Server 2012 スキーマのセットアップ:

CREATE TABLE t
    ([QuestionID] int, [Val] int, [Avg] int)
;

INSERT INTO t
    ([QuestionID], [Val], [Avg])
VALUES
    (1, 1, 3),
    (1, 5, 3),
    (1, 2, 3),
    (2, 5, 7),
    (2, 6, 7),
    (2, 5, 7)
;

クエリ 1 :

SELECT t.*, 
       CASE WHEN t2.cnt >= 3 THEN 1 ELSE 0 END as BelowAvg 
FROM t
LEFT OUTER JOIN (SELECT QuestionID, count(*) as cnt
            FROM t
            WHERE val < avg
            GROUP BY QuestionID) t2 ON t.QuestionID = t2.QuestionID

結果

| QUESTIONID | VAL | AVG | BELOWAVG |
|------------|-----|-----|----------|
|          1 |   1 |   3 |        0 |
|          1 |   5 |   3 |        0 |
|          1 |   2 |   3 |        0 |
|          2 |   5 |   7 |        1 |
|          2 |   6 |   7 |        1 |
|          2 |   5 |   7 |        1 |
于 2013-09-09T17:33:32.883 に答える