문제
나는 같은 테이블이있다
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'
이에 대한 단점은 모든 기준 (이 경우 연락처 값)에 대해 자체 조인 (동일한 테이블에 가입)을 수행해야한다는 것입니다.
제휴하지 않습니다 StackOverflow