1

私は次のようなテーブルを持っています

id contact value
1  A       2
2  A       3
3  B       2
4  B       3
5  B       4
6  C       2

ここで、特定の一連の連絡先の共通の最大値を取得したいと考えています。たとえば、連絡先セットが {A,B} の場合、3 が返されます。セット {A,C} の場合は 2 を返し、セット {B} の場合は 4 を返します。

これを実行できる SQL ステートメントは何ですか?

4

3 に答える 3

0
SELECT max(value) FROM table WHERE contact IN ('A', 'C')

編集:最大共通

declare @contacts table ( contact nchar(10) )


insert into @contacts values ('a')
insert into @contacts values ('b')


select MAX(value)
from MyTable
where (select COUNT(*) from @contacts) = 
      (select COUNT(*) 
       from MyTable t
       join @contacts c on c.contact = t.contact
       where t.value = MyTable.value)
于 2009-09-24T05:48:46.930 に答える
0

これを試して:

  SELECT value, count(distinct contact) as cnt
    FROM my_table
   WHERE contact IN ('A', 'C')
   GROUP BY value
   HAVING cnt = 2
   ORDER BY value DESC
   LIMIT 1

これは MySQL の構文であり、データベースによって異なる場合があります。句の数字 (2)HAVINGは、セット内の要素の数です。

于 2009-09-24T05:55:59.803 に答える
0

ほとんどの場合、次を使用するように指示されます。

  SELECT MAX(t.value)
    FROM TABLE t
   WHERE t.contact IN ('A', 'C')
GROUP BY t.value
  HAVING COUNT(DISTINCT t.*) = 2

いくつかの注意事項:

  • がキーです。DISTINCTそうしないと、t.contact = 'A' の行が 2 つある可能性があります。
  • の数は、句COUNT(DISTINCT t.*)で指定された値の数と等しくなければなりませんIN

私の好みは、JOIN を使用することです。

  SELECT MAX(t.value)
    FROM TABLE t
    JOIN TABLE t2 ON t2.value = t.value AND t2.contact = 'C'
   WHERE t.contact = 'A'

これの欠点は、すべての基準 (この場合は連絡先の値) に対して自己結合 (同じテーブルへの結合) を行う必要があることです。

于 2009-09-24T06:19:08.210 に答える