0

次の形式に似た一連のデータがあります。

グループ | エレメント
---------------
  1 | あ
  1 | B
  1 | ハ
  2 | あ
  3 | B
  4 | あ
  4 | B
  5 | あ
  5 | ハ

各グループに要素 A と B の両方が存在することを確認できるようにしたいと考えています。理想的には、両方の要素を持つグループのみを返します。上記の例では、GROUP 1 と GROUP 4 のみを返したいと思います。

編集:
申し訳ありませんが、'A' と 'B' が唯一のオプションであるとほのめかすべきではありませんでした。「A」や「B」などの特定の値の存在を具体的に探すことは可能ですか? 他の可能な値があるかもしれません。これを反映するようにサンプル データを更新しました。

4

5 に答える 5

3

これはもっと問題ですが、各個人をそれぞれでRelational Division表示する必要があります。GROUPElement

クエリ:

SELECT  a.*
FROM    TableName a
WHERE   EXISTS
        (
            SELECT  1
            FROM    TableName b
            WHERE   a."GROUP" = b."GROUP" AND
                    b."ELEMENT" IN ('A','B')
            GROUP   BY b."GROUP"
            HAVING  COUNT(*) = 2
        )

出力

╔═══════╦═════════╗
║ GROUP ║ ELEMENT ║
╠═══════╬═════════╣
║     1 ║ A       ║
║     1 ║ B       ║
║     1 ║ C       ║
║     4 ║ A       ║
║     4 ║ B       ║
╚═══════╩═════════╝

しかし、戻りたいだけの場合はGROUP、以下でこれを簡単に使用できます

SELECT  "GROUP"
FROM    TableName b
WHERE   "ELEMENT" IN ('A','B')
GROUP   BY "GROUP"
HAVING  COUNT(*) = 2

出力

╔═══════╗
║ GROUP ║
╠═══════╣
║     1 ║
║     4 ║
╚═══════╝
于 2013-06-03T16:42:47.197 に答える
1

このクエリは、すべての GROUP (ID) と ELEMENT (名前) を返します。ここで、各 GROUP には正確に 2 つの異なる要素があります。HAVING「正確に 2 つの異なる要素」ルールを修正するための句を変更します。

SELECT GROUP, ELEMENT 
FROM MyTable
WHERE GROUP in 
    (SELECT GROUP from MyTable
     GROUP BY GROUP 
     HAVING COUNT (DISTINCT ELEMENT)=2
     )
于 2013-06-03T15:38:07.133 に答える
0
> SELECT ID,
>        ELEMENT FROM STACK WHERE ID IN
>     (SELECT ID
>      FROM
>        (SELECT id AS ID,
>                COUNT(DISTINCT(element)) AS B
>         FROM STACK
>         WHERE ELEMENT IN ('A',
>                           'B')
>         GROUP BY id HAVING COUNT(DISTINCT(element)) >1)A)   AND ELEMENT IN ('A',
>                   'B');

** idは質問の グループで、テーブル名はスタックです

「ELEMENT IN」条件を削除すると、複数の要素を持つすべてのグループを取得できます

于 2013-06-03T21:39:04.143 に答える
0

要素AとBのみを持つグループを返します

SELECT a.*
FROM Table a
WHERE EXISTS
(
    SELECT 1
    FROM Table b
    WHERE a.group = b.group
    GROUP BY b.group
   HAVING COUNT(distinct element) = 2
)
and a.element IN ('A','B')
于 2015-06-05T13:36:33.247 に答える