0

case ステートメントで count (*) に何らかの値を掛けて使用すると問題が発生します。

これは私のコードです -

  SELECT DISTINCT
         plmn,
         CASE
            WHEN timestamp < '20130300' THEN (COUNT (*) * 0.02)
            ELSE (COUNT (*) * 0.03)
         END
            AS total
    FROM tap_out
   WHERE teleservicecode = '22' AND calltype = 'MOC'
-- AND timestamp LIKE '201303%'
GROUP BY plmn, timestamp

そして、私はこれらの値を受け取ります -

ここに画像の説明を入力

ただし、count(*) を使用すると、case ステートメントではなく何らかの値を乗算すると、他の値が返されるため、これは間違っています。これはコードです -

SELECT DISTINCT
       plmn, count (*)  * 0.02 AS total
            FROM tap_out
           WHERE     teleservicecode = '22'
                 AND calltype = 'MOC'
                -- AND timestamp LIKE '201303%'
        GROUP BY plmn

そして、私はこれらの値を受け取ります -

ここに画像の説明を入力

正しい値を受け取ることができるように、最初の選択ステートメントでカウントを修正するにはどうすればよいですか?

4

3 に答える 3

4

ケースとは関係ありません。2 番目のクエリでは、タイムスタンプでグループ化していないため、カウントが多くなり、合計レコード数が少なくなる可能性が非常に高くなります。最初のクエリでは、はるかに多くのレコードが返されますが、distinct.

これを試して:

SELECT
  plmn,
  COUNT(*) * Multiplyer AS total
FROM  
  (SELECT
    plmn,
    CASE WHEN timestamp < '20130300' THEN 
      0.02
    ELSE
      0.03
    END AS Multiplyer
  FROM
    tap_out
  WHERE 
    teleservicecode = '22' AND calltype = 'MOC')
GROUP BY
  plmn,
  Multiplyer
于 2013-10-08T16:48:49.483 に答える
1

次のようなクエリを書いてみてください。

-- then I sum the value for plmn
SELECT plmn,
       sum(val) total
FROM (
    -- first I calculate the value for each plmn/timestamp couple
    SELECT   plmn,
             CASE
                WHEN timestamp < '20130300' THEN (COUNT (*) * 0.02)
                ELSE (COUNT (*) * 0.03)
             END
                AS val
        FROM tap_out
       WHERE teleservicecode = '22' AND calltype = 'MOC'
    -- AND timestamp LIKE '201303%'
    GROUP BY plmn, timestamp
)
GROUP BY plmn
于 2013-10-08T16:54:49.843 に答える
1

これはあなたが必要とするものですか?

SELECT plmn,
       Sum(CASE
            WHEN timestamp < '20130300'
            THEN 0.02
            ELSE 0.03
         END)
            AS total
FROM   tap_out
WHERE  teleservicecode = '22' AND
       calltype = 'MOC'
GROUP BY plmn    
于 2013-10-08T18:07:42.663 に答える