school.programmers.co.kr
동물 보호소에 들어온 동물 중 고양이와 개가 각각 몇 마리인지 조회하는 SQL문을 작성해주세요. 이때 고양이를 개보다 먼저 조회해주세요.
ANIMAL_ID
|
ANIMAL_TYPE
|
DATETIME
|
INTAKE_CONDITION
|
NAME
|
SEX_UPON_INTAKE
|
A373219
|
Cat
|
2014-07-29 11:43:00
|
Normal
|
Ella
|
Spayed Female
|
A377750
|
Dog
|
2017-10-25 17:17:00
|
Normal
|
Lucy
|
Spayed Female
|
A354540
|
Cat
|
2014-12-11 11:48:00
|
Normal
|
Tux
|
Neutered Male
|
#WHERE절 사용
SELECT ANIMAL_TYPE, COUNT(*) AS count
FROM ANIMAL_INS
WHERE ANIMAL_TYPE IN('Cat','Dog')
/*WHERE ANIMAL_TYPE='Cat' OR 'Dog'*/
1)GROUP BY ANIMAL_TYPE
2)ORDER BY FIELD(ANIMAL_TYPE,'Cat','Dog');
1)[MYSQL]
ORDER BY FIELD(필드명,값1,값2,값3)
--필드명에 해당하는 순서대로 정렬하되, 값,1,2,3순으로 정렬합니다
[ORACLE]
ORDER BY
CASE WHEN your_field = '값1' THEN 1
WHEN your_field = '값2' THEN 2
WHEN your_field = '값3' THEN 3
ELSE 4 -- 다른 값들에 대한 정렬 조건
END;
2)GROUP BY 절을 사용하여 "ANIMAL_TYPE" 열을 기준으로 동물을 그룹화하고, 각 그룹 내에서 "COUNT" 함수를 사용하여 각 동물 종류별로 개수를 계산합니다:/
#UNION절 사용
1)SELECT 'Cat' AS ANIMAL_TYPE, COUNT(*)
FROM ANIMAL_INS
WHERE ANIMAL_TYPE ='Cat'
UNION
*SELECT 'Dog' AS ANIMAL_TYPE, COUNT(*)
FROM ANIMAL_INS
WHERE ANIMAL_TYPE ='Dog'
*이렇게 select절에서 SELECT 절에서 특정 칼럼 값을 하드코딩하여 반환할 수 있다. 즉, 'CAT'이라는 값을 ANIMAL_TYPE 칼럼으로 반환하는 것은 가능하다. 이것은 결과 집합에 고정된 값을 가진 칼럼을 추가하고자 할 때 유용하다.
ㄴ oracle , mysql 에서 모두 가능
#HAVING 절 사용
SELECT ANIMAL_TYPE, COUNT(*) AS count
FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
HAVING ANIMAL_TYPE IN('Cat','dog')
ORDER BY ANIMAL_TYPE;
*/*ORDER BY 1*/
*)ORDER BY 1은 "ANIMAL_TYPE" 열을 오름차순으로 정렬하라는 의미 즉,
숫자 1은 결과 집합에서 첫 번째 열을 나타냄
Group by 유무 (WHERE만 있다면?)차이가 궁금해서 직접 오라클 수행
--테이블 생성 코드
create table ANIMAL_INS
( Animal_ID VARCHAR(10) NOT NULL
,ANIMAL_TYPE VARCHAR(10)
,DATETIME VARCHAR(30)
);
insert into ANIMAL_INS values ('A373219','Cat','2014-07-29');
insert into ANIMAL_INS values ('A377750','dog','2017-10-25');
insert into ANIMAL_INS values ('A354540','Cat','2014-12-11');
select * from ANIMAL_INS;
SELECT ANIMAL_TYPE, COUNT(*) AS COUNT
FROM ANIMAL_INS
WHERE ANIMAL_TYPE IN ('Cat','dog')
Group BY ANIMAL_TYPE
ORDER BY ANIMAL_TYPE;
원인
|
개별 열 표현식이 GROUP BY 절에 포함되지 않은 경우 SELECT 목록에는 AVG, COUNT, MAX, MIN, SUM, STDDEV 또는 VARIANCE와 같은 그룹 함수와 개별 열 표현식이 모두 포함될 수 없습니다.
|
해결방안
|
SELECT 목록에서 그룹 함수 또는 개별 열 표현식을 삭제하거나 나열된 모든 개별 열 표현식을 포함하는 GROUP BY 절을 추가합니다.
|
'SQL 문제풀이' 카테고리의 다른 글
Customers Who Never Order - 주문을 하지 않은 고객의 이름 추출 (0) | 2023.10.10 |
---|---|
GROUP BY절, INNER JOIN (0) | 2023.10.03 |
상품 별 오프라인 매출 구하기 (0) | 2023.10.02 |
순위 함수 (0) | 2023.09.21 |
[GROUP BY] 가격대 별 상품 개수 구하기 (0) | 2023.09.19 |