SQL에는 데이터베이스에 대한 쿼리를 만드는 데 사용되는 다양한 유형의 작업이 있습니다. SQL의 HAVING 문은 초기 쿼리 위에 하위 쿼리처럼 작동합니다. 하나의 공통 값을 가진 항목이 압도적으로 많고 이를 추가로 필터링하려는 경우에 잘 작동합니다. 이 기사에서는 어떻게 작동하는지 살펴보겠습니다.
준비
MySQL을 사용하는 이 SQL Fiddle에서는 이러한 예제에 사용되는 샘플 스키마를 만들었습니다.
create table Cars ( id INT PRIMARY KEY, year VARCHAR(50), car_make VARCHAR(50), car_model VARCHAR(50) );
이렇게 하면 "Cars"라는 테이블이 생성되고 각 자동차의 제조사 모델과 연도를 살펴보는 스키마가 있습니다. 다음 블록은 해당 열에 값을 삽입합니다.
insert into Cars (id, year, car_make, car_model) values (1, 2011, 'Mazda', 'Miata MX-5'); insert into Cars (id, year, car_make, car_model) values (2, 1969, 'Ford', 'Mustang'); insert into Cars (id, year, car_make, car_model) values (3, 2007, 'Toyota', '4Runner'); insert into Cars (id, year, car_make, car_model) values (4, 2013, 'Porsche', '911'); insert into Cars (id, year, car_make, car_model) values (5, 1991, 'Buick', 'Coachbuilder'); insert into Cars (id, year, car_make, car_model) values (6, 2007, 'Kia', 'Sportage'); insert into Cars (id, year, car_make, car_model) values (7, 1997, 'Oldsmobile', 'Cutlass Supreme'); insert into Cars (id, year, car_make, car_model) values (8, 2003, 'BMW', '7 Series'); insert into Cars (id, year, car_make, car_model) values (9, 1996, 'Ford', 'F150'); insert into Cars (id, year, car_make, car_model) values (10, 1992, 'Suzuki', 'SJ'); insert into Cars (id, year, car_make, car_model) values (11, 2001, 'Jeep', 'Grand Cherokee'); insert into Cars (id, year, car_make, car_model) values (12, 2000, 'Ford', 'F250'); insert into Cars (id, year, car_make, car_model) values (13, 2003, 'Honda', 'Insight'); insert into Cars (id, year, car_make, car_model) values (14, 2006, 'Chevrolet', 'HHR Panel'); insert into Cars (id, year, car_make, car_model) values (15, 1987, 'Mercedes-Benz', 'S-Class'); insert into Cars (id, year, car_make, car_model) values (16, 2004, 'Chevrolet', 'SSR'); insert into Cars (id, year, car_make, car_model) values (17, 1990, 'Maserati', '228'); insert into Cars (id, year, car_make, car_model) values (18, 2005, 'Saturn', 'Ion'); insert into Cars (id, year, car_make, car_model) values (19, 1987, 'Audi', '5000CS'); insert into Cars (id, year, car_make, car_model) values (20, 1999, 'Chevrolet', 'S10'); insert into Cars (id, year, car_make, car_model) values (21, 2007, 'Jeep', 'Liberty'); insert into Cars (id, year, car_make, car_model) values (22, 2002, 'Lamborghini', 'Murciélago'); insert into Cars (id, year, car_make, car_model) values (23, 2000, 'Hyundai', 'Tiburon'); insert into Cars (id, year, car_make, car_model) values (24, 2011, 'Jeep', 'Patriot'); insert into Cars (id, year, car_make, car_model) values (25, 1985, 'Pontiac', 'Sunbird');
이 연습을 위해 자신의 데이터를 모의하려면 mockaroo.com을 사용하는 것이 좋습니다. 이 방법을 사용하면 아주 간단하게 데이터베이스 스키마를 구성할 수 있습니다.
HAVING 사용 방법
SELECT COUNT(id), car_make FROM Cars GROUP BY car_make HAVING COUNT(id) > 0;
집계 함수를 사용해야 하고 WHERE 절을 사용할 수 없는 경우 HAVING을 사용합니다. 집계 함수는 일종의 연산을 수행하고 단일 값을 반환하는 함수입니다. COUNT, AVG 또는 SUM을 생각하십시오. 위의 코드는 다음을 반환합니다.
COUNT(id) | 자동차 제작 |
1 | 아우디 |
1 | BMW |
1 | 뷰익 |
3 | 쉐보레 |
3 | 포드 |
1 | 혼다 |
1 | 현대 |
3 | 지프 |
1 | 기아 |
1 | 람보르기니 |
1 | 마세라티 |
1 | 마쓰다 |
1 | 메르세데스-벤츠 |
1 | 올즈모빌 |
1 | 폰티악 |
1 | 포르쉐 |
1 | 토성 |
1 | 스즈키 |
1 | 도요타 |
우리는 select 문을 사용하여 존재하는 car_make의 sql COUNT를 가져오고 car_make로 구분하는 group by 절을 사용합니다.
참가자의 81%는 부트캠프에 참석한 후 기술 직업 전망에 대해 더 자신감을 느꼈다고 말했습니다. 지금 부트캠프에 참여하십시오.
부트캠프 졸업생은 부트캠프 시작부터 첫 직장을 찾는 데까지 6개월도 채 걸리지 않았습니다.
그게 다야! 참고로 SQL 쿼리의 HAVING 절은 집계 함수를 사용하여 데이터베이스에 대한 추가 쿼리 작업을 수행하는 하위 필터입니다.
다른 집계 함수로 실험하여 이 고유한 절에 대한 지식을 높이십시오!