문제

나는 같은 테이블이있다

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}의 경우 세트 {b}에 대해 2를 반환합니다.

어떤 SQL 문이이를 수행 할 수 있습니까?

도움이 되었습니까?

해결책

이 시도:

  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) in HAVING 절은 세트의 요소 수입니다.

다른 팁

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

편집 : Max Common

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)

대부분은 사용하라고 말할 것입니다.

  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'의 두 행을 가질 수 있습니다.
  • 개수 COUNT(DISTINCT t.*) 지정된 값의 수와 동일해야합니다. IN

내가 선호하는 것은 조인을 사용하는 것입니다.

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

이에 대한 단점은 모든 기준 (이 경우 연락처 값)에 대해 자체 조인 (동일한 테이블에 가입)을 수행해야한다는 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top