0

これが私が持っているデータのサンプルです:

-----------------------------------
 ID | Item                 | Value
  1 | Carrot               |  0
  2 | Carrot               |  1
  3 | Peas                 |  1
  4 | Peas                 |  2
  5 | Peas                 |  3
  6 | Salad                |  0
  7 | Salad                |  3
  8 | Salad                |  5
  9 | Corn                 |  0
-----------------------------------

次の場合に、値が0の行が表示されるクエリを実行したいと思います。

  • それらはそのアイテムの唯一の値です
  • そのアイテムには他に複数の値があります

または、別の言い方をすれば、次の場合は結果に含まれるべきではありません。

  • 同じアイテムには他に1つの値しかありません

ペア(item、value)は私のデータで一意であることに注意してください。

したがって、データサンプルの場合、クエリの結果は次のようになります(最初の行のみが消えます)。

-----------------------------------
 ID | Item                 | Value
  2 | Carrot               |  1
  3 | Peas                 |  1
  4 | Peas                 |  2
  5 | Peas                 |  3
  6 | Salad                |  0
  7 | Salad                |  3
  8 | Salad                |  5
  9 | Corn                 |  0
-----------------------------------

これを行うための最良かつ最も効率的な方法は何でしょうか?

4

1 に答える 1

2

データをアイテムごとにグループ化する必要があるため、1つの可能性は次のとおりです。

SELECT ID, Item, Value 
FROM data 
WHERE Value <> 0
OR Item IN
  (SELECT Item FROM data
   GROUP BY Item
   HAVING COUNT(*) <> 2);

このSQLFiddleを参照してください

于 2012-10-20T12:48:38.703 に答える