mysql 필터 그룹화
데이터를 그룹별로 그룹화하는 것 외에도 MySQL은 그룹 필터링을 허용하여 포함할 그룹과 제외할 그룹을 지정합니다. 예를 들어, 두 개 이상의 주문을 받은 모든 고객을 나열할 수 있습니다. 이러한 데이터를 도출하려면 개인이 아닌 전체 그룹을 기준으로 필터링을 수행해야 합니다.
where 절의 역할을 살펴봤습니다. 그러나 where 필터는 그룹이 아닌 행을 지정하므로 이 예에서는 where가 작업을 수행하지 않습니다. 실제로 그룹화 개념이 없는 곳은 어디입니까?
그럼 어디서 대신 뭘로 쓸까요? MySQL은 이 목적을 위해 또 다른 절, 즉 had 절을 제공합니다. have는 where와 매우 유사합니다. 실제로 지금까지 배운 모든 유형의 where 절을 have로 대체할 수 있습니다. 유일한 차이점은 행을 필터링하는 반면 필터 그룹을 갖는 것입니다.
참고 : 모든 where 연산자를 지원합니다.
그럼 그룹 필터링은 어떻게 하나요? 다음 예를 살펴보십시오.
입력:
select cust_id,count(*) as orders from orders group by cust_id having count(*) >= 2;
출력:
분석: 이 선택의 처음 3개 위의 명령문과 유사한 명령문 행입니다. 마지막 줄에는 count(*>)>=2(주문 2개 이상)로 해당 그룹을 필터링하는 갖는 절이 추가됩니다.
보시다시피 여기에서는 필터링이 특정 행 값이 아닌 그룹화된 집계 값을 기반으로 하기 때문에 where 절이 작동하지 않습니다.
있는 것과 어디에 있는 것의 차이: 데이터 그룹화 전 where 필터와 데이터 그룹화 후 필터 있음을 이해하는 또 다른 방법이 있습니다. 이는 중요한 차이점입니다. 위치에 의해 제외된 행은 그룹화에 포함되지 않습니다. 이는 계산된 값을 변경하여 이러한 값을 기반으로 필터링되는 have 절의 그룹화에 영향을 미칠 수 있습니다.
그러면 하나의 명령문에서 where 절과 has 절을 모두 사용해야 할까요? 실제로 그렇습니다. 지난 12개월 동안 두 명 이상의 고객을 반환하도록 위의 문을 추가로 필터링한다고 가정해 보겠습니다. 이를 달성하려면 where 절을 추가하여 12개월 이내에 접수된 주문을 필터링할 수 있습니다. 그런 다음 주문이 2개 이상인 그룹을 필터링하려면 have 절을 추가하세요.
더 나은 이해를 위해 2개(포함) 이상의 제품 공급업체와 10개(포함) 이상의 가격을 나열하는 아래 예를 참조하세요.
입력:
select vend_id,count(*) as num_prods from products where prod_price >= 10 group by vend_id having count(*) >=2;
출력:
분석: 이 명령문에서 첫 번째 줄은 집계 함수를 사용하는 기본 SELECT로 이전과 다릅니다. 예제는 매우 유사합니다. . WHERE 절은 prod_price가 10 이상인 모든 행을 필터링합니다. 그런 다음 데이터는 vend_id별로 그룹화되고 HAVING 절은 개수가 2 이상인 그룹을 필터링합니다.
WHERE 절이 없으면 두 개의 행이 더 검색됩니다(공급업체 1002, 판매된 모든 제품 의 가격은 10 미만, 공급업체 1001, 3개 제품을 판매하지만 제품은 1개만 있음). 가격이 보다 크거나 10과 같음):
입력: vend_id가 count(*) >=인 제품 그룹에서 num_prods로 vend_id,count(*)를 선택합니다. 2;
출력:
[관련 권장 사항]
위 내용은 mysql 데이터 그룹화: 필터 그룹화의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!