2010-06-09 6 views
1

질문이 떠있었습니다. 기본 SQL 용어로 설정되어 있지만 성격은 순수한 수학입니다 (어쩌면 http://mathoverflow.com도 방문해야합니다).최소 N 개의 조건을 만족하는 M 선택 가능

나는 이론적 인 데이터베이스에 6 개의 필드가있는 테이블을 가지고 있습니다. 모두 숫자입니다. 또한 우리는 Field_1> Field_5, Field_4 = 3 등 7 가지 조건과 같은 기본 조건을 가지고 있습니다. 나는 적어도 4를 만족시키는 선택을 써야합니다.

쓰기 많은 논리 같은 같은 조건 (cond_1 AND cond_2 AND cond_3 및 cond_4) OR로 선택 looooooooooooooooooooooooooong (...)가 아무튼 한 7 개 요소에서 4 조합 (140)과 동일하기 때문에, 방법은없고, 너무 많은 조건을 쓰고 싶지 않습니다.

그래서 단순화 된 형식으로 select를 작성합니까?

+0

어떤 데이터베이스를 사용하고 있습니까? 유형 및 버전? –

답변

6

는 행 만족하고 대상 값으로 합계를 비교하는 각 조건에 대해 1을 계산하는 일을 한 가지 방법 :

SELECT * 
FROM yourtable 
WHERE (
      (CASE WHEN condition1 THEN 1 ELSE 0 END) + 
      (CASE WHEN condition2 THEN 1 ELSE 0 END) + 
      ... 
      (CASE WHEN condition7 THEN 1 ELSE 0 END) 
    ) >= 4 

참고 이것은 당신이 각각의 행에 대한 모든 조건을 평가 필요 것 단락 효과는 없지만 간단하고 어쩌면 성능이 충분할 수도 있습니다.

WHERE (condition1) + (condition2) + ... + (condition7) >= 4 
+0

성능이나 데이터베이스 버전의 문제는 아니지만 실제로는 이론적 인 질문이며 PL/SQL과 같은 외장이 아닌 순수한 SQL로 수행해야합니다. 대신 오라클을 선호합니다. 그런데 폭 넓은 답변을 주셔서 감사합니다. 사실 그렇지만 Mike Burton이 처음이었습니다. –

+0

사실 Mark는 처음 15 초 정도의 시간이 걸렸으므로 전반적으로 더 나은 대답을했습니다. 따라서 대신 Mark를 표시 할 수 있습니다. –

+0

네가 원했던 것처럼,하지만 지금은 두 가지 대답에 대해 몇 가지 의구심이있다. 테이블에서 모든 행을 제공하지 않습니까? 4 개의 조건이 모든 필드에서 충족되는 경우 행을 제공하는 대신 4 개 이상의 조건을 충족시키는 필드가 있습니까? –

0

당신은 간단하게 추가 할 수 있습니다 : 당신이 MySQL을 사용하는 경우 부울 결과가 그래서 당신이 CASE 문을 필요하지 않습니다 0 또는 1에 해당하기 때문에

당신은 훨씬 더 간단한 방법이 쓸 수 진정한 조건들의 합은 다음과 같이 합계된다. aa = 012h, aa = 0, aa = aa, aaa, aaa, aaa, aaa. 그 sum-of-cases 표현식의 불확실성을 약간 더 읽기 쉬운 코드를위한 함수로 넣을 수도 있습니다.

0

몇 가지 조건이 충족되는지 간단히 계산하는 것이 좋습니다. 특정 구문은 사용중인 데이터베이스 관리 엔진에 따라 다르지만 MySQL에서는 다음과 같이 보입니다.

SELECT things 
FROM places 
WHERE IF(cond_1, 1, 0) + IF(cond_2, 1, 0) + IF(cond_3, 1, 0) + IF(cond_4, 1, 0) + IF(cond_5, 1, 0) >= 4;