2009-08-29 6 views
2

COUNT를 반환하는 SELECT 하위 쿼리를 작성했습니다. 그러나 하위 쿼리에서 HAVING 절을 사용해야하고 결과적으로 하위 쿼리 SELECT에 해당 열을 지정해야합니다. 결과적으로 COUNT 및 column_for_having_clause의 2 개의 열이 있습니다.여러 열을 반환하는 하위 쿼리

SQL에 첫 번째 열만 가져 가도록 말할 수있는 방법이 있습니까? "피연산자가 1 열을 포함해야합니다."라는 오류 메시지가 나타납니다. 나는 이것이 공통적 인 문제 여야한다고 생각한다. 누군가 그 방법을 알고 있는가?

또한 SELECT 쿼리에서 열을 지정하지 않고 HAVING 절을 실행할 수있는 방법이 있습니까?

감사합니다.

+0

이렇게하면 특정 데이터 세트와 반환 할 항목으로 쉽게 대답 할 수 있습니다. – cletus

답변

1

당신은 그러나 아주 추악한

SELECT blah FROM foo WHERE bar = (SELECT cnt FROM (SELECT cnt, column_for_having_clause FROM table .... HAVING ... LIMIT 1)) 

을 할 수 있습니다.

1

물론, HAVING 절에 원하는 모든 표현식을 지정할 수 있습니다. 선택 목록의 열일 필요는 없습니다.

SELECT ... 
FROM foo 
WHERE x = (SELECT COUNT(*) FROM bar 
      GROUP BY y HAVING y = MAX(y)); 

외부 쿼리의 값과 개수를 비교하는 경우에도 튜플을 비교할 수 있습니다.

SELECT ... 
FROM foo 
WHERE (x, 1) = (SELECT COUNT(*), y = MAX(y) AS is_max FROM bar 
       GROUP BY y HAVING is_max = 1); 
+0

답장을 보내 주셔서 대단히 감사합니다 ...하지만 선택 항목에없는 열을 열 추가 할 때마다 "알 수없는 열"오류가 발생합니다. 왜 그럴까요? –

+2

질문을 편집하고 SQL 쿼리를 표시하면 도움이됩니다. –