2011-03-31 4 views
1

집계와 관련된 MySql select 문에서 을 선택하면 열 단위로 그룹화 집계가 없음?집합을 선택하지 않고 열 단위로만 선택

는 기본적으로 나는 집계에 따라 기준에 따라 하위 쿼리에서 ID를 선택하려면이 경우 전체 클라이언트에 대한 지급 :

select idclient, business_name from client where idclient in 
(
    select idclient, sum(amount) as total 
    from payment 
    group by idclient 
    having total > 100 
) 

... 그러나 이것은 서브 쿼리 오류로 인해 Operand should contain 1 column(s) 실패 id (내가 원하는)와 total (나는 그렇지 않다)을 모두 선택합니다. 어떤 식 으로든 서브 쿼리 결과에서 total을 제외시킬 수 있습니까?

편집 : 가능한 경우 조인을 사용하지 않는 것이 좋습니다. where 절이 다른 기존 기능에 전달됩니다.

이것이 사기꾼이라면 사과드립니다. 정직한 검색을했습니다. SQL 집계 질문에서 정확한 답을 찾을 수 없었습니다.

답변

3

귀하의 질의는 다음과 같이해야합니다 :

select idclient, business_name from client where idclient in 
(
    select idclient 
    from payment 
    group by idclient 
    having sum(amount) > 100 
) 

당신은 당신이 당신의 where 절에 같은 열 #을 선택해야 HAVING 절에 서브 쿼리에서 집계 함수를 넣을 필요가있다.

+0

감사합니다. 나는 '데'가 선택된 열만 사용할 수 있다는 생각이 어디 있는지 알지 못합니다 : \ –

1
WHERE idclient IN (...) 

(...) 내부의 내용은 하위 쿼리입니다. IN 절에 대해 하나의 데이터 열만 있으면되므로 하나의 열만 반환해야합니다. 당신은이 일을 시도 할 수

SELECT idclient 
FROM payment 
GROUP BY idclient 
HAVING SUM(amount) > 100 
0

:

당신은에 의해 총 열을 생략 할 수 있으며, client.idclient 열이 PK처럼 많이 보이기 때문에,

SELECT c.idclient, c.business_name 
FROM payment p 
    INNER JOIN client c ON c.idclient = p.idclient 
GROUP BY c.idclient, c.business_name 
HAVING SUM(p.amount) > 100 

을 그리고 당신도 아마 수 GROUP BY에서 client.business_name을 생략하십시오. 따라서 최종 검색어는 다음과 같습니다.

SELECT c.idclient, c.business_name 
FROM payment p 
    INNER JOIN client c ON c.idclient = p.idclient 
GROUP BY c.idclient 
HAVING SUM(p.amount) > 100 
관련 문제