1

重複の可能性:
SQL: 出力列で発生する発生回数をカウントし、発生回数に基づいて割合を計算します

テスト データ/テーブルの URL は次のとおりです: http://sqlfiddle.com/#!2/56ffd4/1

私のテーブルは、次のテーブルの o/p を生成します。

(id,       resolution) 
('abc-123', 'fail'),
('abc-456', 'pass'),
('abc-789', 'pass'),
('abc-799', 'fail'),
('abc-800', 'pass'),
('abc-900', 'pass');

私のスクリプトo/pは:

id          RESOLUTION  TS              @PREV   C   RES
abc-123     fail    July, 02 2012         1     1   -
abc-456     pass    July, 02 2012         2     0   50.00%
abc-789     pass    July, 02 2012         1     0   100.00%
abc-799     fail    July, 02 2012         1     1   -
abc-800     pass    July, 02 2012         2     0   50.00%
abc-900     pass    July, 02 2012         0     0   100.00%

ここにo/pスクリプトがあります:

SELECT st.*, 
       @prev:=@counter + 1,
       @counter:= CASE 
         WHEN st.resolution = 'pass'
         THEN 0
         ELSE @counter + 1
       END c,
       CASE WHEN @counter = 0 
            THEN CONCAT(FORMAT(100/@prev, 2), '%') 
            ELSE '-' 
       END res
  FROM so_test st, (SELECT @counter:=0) sc

上記の出力テーブルに 2 つの列を追加して、合格値と失敗値の出現回数を次のようにカウントする必要があります。

id          RESOLUTION  TS              @PREV   C            fail   pass
    abc-123     fail    July, 02 2012         1     1   -        1
    abc-456     pass    July, 02 2012         2     0   50.00%          1
    abc-789     pass    July, 02 2012         1     0   100.00%         1
    abc-799     fail    July, 02 2012         1     1   -        1
    abc-800     pass    July, 02 2012         2     0   50.00%          1
    abc-900     pass    July, 02 2012         0     0   100.00%         1
4

1 に答える 1

1

指定したように、出力テーブルの最後に合格列と不合格列が必要な場合は、後にコンマを置きます

END res 

その後に次を追加します。

CASE WHEN st.resolution = 'fail'
            THEN 1
            ELSE NULL
END fail,
CASE WHEN st.resolution = 'pass'
            THEN 1
            ELSE NULL
END pass

列の空白が何であるかわかりませんが、NULL として設定しました。

于 2012-07-03T00:48:11.937 に答える