컬럼 B 열에서 동일한 값이 모두 1과 2의 값을 가지고 있다면, 전 1 열 B의 결과를 제외 얼마나SQL 제외한 특정 결과
A B
-- --
a 1
b 1
c 1
d 1
d 2
e 1
f 1
f 2
g 1
의 데이터 세트가 있다고 가정 할 에이?
내가 내 결과이
A B
-- --
a 1
b 1
c 1
d 2
e 1
f 2
g 1
컬럼 B 열에서 동일한 값이 모두 1과 2의 값을 가지고 있다면, 전 1 열 B의 결과를 제외 얼마나SQL 제외한 특정 결과
A B
-- --
a 1
b 1
c 1
d 1
d 2
e 1
f 1
f 2
g 1
의 데이터 세트가 있다고 가정 할 에이?
내가 내 결과이
A B
-- --
a 1
b 1
c 1
d 2
e 1
f 2
g 1
는 값 1과 2를 위해 여기에 명시 적으로 확인하고 정확히 그 두 가지가 있다는 사실을 사용하여처럼 보이게합니다. 항상 가장 높은 가치를 원한다고 가정하는 것이 안전하다면이 점을 덜 복잡하게 만들 수 있습니다.
select
tbl.A,
tbl.B
from
Table1 tbl
left outer join (
select
A
from
Table1
where
B in (1,2)
group by
A
having
count(B) = 2
) mlt on tbl.A = mlt.A
where
(
mlt.A is not null
and tbl.B = 2
) or (
mlt.A is null
and tbl.B = 1
)
예제 데이터와 원하는 결과의 경우 결과를 얻는 가장 간단한 쿼리는 GROUP BY
연산과 집계 함수가됩니다. 우리가 열 B
에 1
또는 2
이 행에만 관심이 있다면
SELECT d.A
, MAX(d.B) AS B
FROM my_data_set d
GROUP BY d.A
ORDER BY d.A
, 우리는 출력이 동일 예제 데이터가있는 WHERE
절
SELECT d.A
, MAX(d.B) AS B
FROM my_data_set d
WHERE d.B IN (1,2)
GROUP BY d.A
ORDER BY d.A
를 추가 할 수 있습니다.
이 두 명령문 모두 지정된 결과를 얻습니다. 동일한 예시적인 데이터에 대해, 우리는 명세서의 더 리터럴 구현 설정 동일한 결과를 반환 할 수있다 (이있다. 단지 단일 행 A
의 각 고유 값을 반환)
아니면. A
같은 값에 대해 우리가 NOT EXISTS
조건과 상관 하위 쿼리를 사용할 수 있습니다 2
있는 행이있을 때
1
에 행을 제외합니다. 당신은`EXISTS`을 사용
SELECT d.A
, d.B
FROM my_data_set d
WHERE (d.B = 2)
OR (d.B = 1 AND
NOT EXISTS (SELECT 1
FROM my_data_set e
WHERE e.A = d.A
AND e.B = 2
)
)
ORDER BY d.A, d.B
늘 작업 이것은 다음 세트 1 B, 1 C 1 D 1 D 2 즉 1 F, 1 F 2 g, 1 F, 3 – sumit
@sumit : 대답의 시작 부분에서 말했듯이 제 제안은 질문에 주어진 "* 예제 데이터와 원하는 결과 *"에 적용 할 수있었습니다. 다른 데이터 집합이 주어지면 쿼리의 반환 값이 달라진다는 것을 지적하는 것이 옳습니다. (사실, 내 대답의 두 번째 쿼리는 사용자의 의견에 제안 된 데이터 집합에 주어진 응답에 지정된 결과를 반환합니다.) 다른 데이터 집합이 주어 졌을 때 어떤 결과가 반환되어야하는지는 모호합니다. – spencer7593
select
* from tbl where a IN
(
select
a from tbl
group by a
having count(*)>1
)
and b!=1
UNION ALL
select
* from tbl where a IN
(
select
a from tbl
group by a
having count(*)=1
)
가능성이 높습니다. –
은 1,2 개의 고정 값입니까? 우리는 3을 가질 수 있습니까? – sumit