0

与えられたテーブルt :

a     b    c     d      e
1     2    3      4     7   
1     2    3      5     7
3     2    4      6     7
3     2    4      6     8

列aおよびbの各タプルに関連付けられた、さまざまな値の 1 つ以上のインスタンスを持つ列を特定できる SQL クエリはどれですか?

上記の表tでは、列deはこの基準を満たしますが、列cは満たしません。

列aおよびbから取得されるタプル <1,2> および <3,2>の場合、列cには各タプルの可変値はありません。

dには、タプル <1,2> のさまざまな値の 1 つのインスタンス (値 4 と 5) があります。

eには、タプル <3,2> の値が変化する 1 つのインスタンス (値 7 と 8) もあります。

4

2 に答える 2

2

CASECOUNTおよびを使用すると、次のようなものが機能するはずですGROUP BY

select 
  a, b,
  case when count(distinct c) > 1 then 'yes' else 'no' end colc,
  case when count(distinct d) > 1 then 'yes' else 'no' end cold,
  case when count(distinct e) > 1 then 'yes' else 'no' end cole
from t
group by a, b

SQL フィドルのデモ

于 2013-02-24T00:54:30.563 に答える
0

少し間接的に:

SELECT a, b,
       COUNT(DISTINCT c) AS num_c,
       COUNT(DISTINCT d) AS num_d,
       COUNT(DISTINCT e) AS num_e
  FROM t
 GROUP BY a, b;

これにより、次の結果が得られます。

1   2   1   2   1
3   2   1   1   2

num_cまたはnum_dまたはnum_e列の値が 1 より大きい場合、さまざまな値があります。次のような CASE ステートメントを使用して、クエリを変更して、(a, b) の特定の値に対して列が変化しているかどうかを一覧表示できます。

-- v for varying, n for non-varying
SELECT a, b,
       CASE WHEN COUNT(DISTINCT C) > 1 THEN 'v' ELSE 'n' END AS num_c,
       CASE WHEN COUNT(DISTINCT d) > 1 THEN 'v' ELSE 'n' END AS num_d,
       CASE WHEN COUNT(DISTINCT e) > 1 THEN 'v' ELSE 'n' END AS num_e
  FROM t
 GROUP BY a, b;

これにより、次の結果が得られます。

1   2   n   v   n
3   2   n   n   v

特定の列の値のセットが (a, b) の値に対して変化するかどうかだけを本当に知りたい場合 ((a, b) のどの値が変化するかではなく)、上記のクエリをサブとして使用できます。 - FROM 句でクエリを実行し、必要に応じて整理します。

SELECT MAX(num_c) AS num_c,
       MAX(num_d) AS num_d,
       MAX(num_e) AS num_e
  FROM (SELECT a, b,
               CASE WHEN COUNT(DISTINCT C) > 1 THEN 'v' ELSE 'n' END AS num_c,
               CASE WHEN COUNT(DISTINCT d) > 1 THEN 'v' ELSE 'n' END AS num_d,
               CASE WHEN COUNT(DISTINCT e) > 1 THEN 'v' ELSE 'n' END AS num_e
          FROM t
         GROUP BY a, b
       );

vこれは、より大きいことに依存していnます。このバイナリ決定は十分に簡単です (そして十分に便利です) が、たとえば 4 つの状態をマッピングする場合は、必ずしも便利または簡単ではありません。

これにより、次の結果が得られます。

n   v   v
于 2013-02-24T00:55:49.200 に答える