본문 바로가기
「SQL초급떼기

[JOIN-LEVEL4]코딩테스트 연습JOIN그룹별 조건에 맞는 식당 목록 출력하기

by DayGo 2023. 7. 30.

https://school.programmers.co.kr/learn/courses/30/parts/17046

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

3개월만에 다시 푸니 너무 어려웠다!!!

join과 where 절을 같이 활용하는 문제는 항상 헷갈린다.

 

* 이슈사항

1. where 절에 in을 쓸때는 써브쿼리문에 limit 문이 먹히지 않는다!! syntax 오류남

그리고 where 절에 특정 컬럼이 있는지 in 을 쓸때는 서브쿼리에 반드시 그 컬럼을 포함한 여러 컬럼이 있어도 된다 ㅋ

 

where member_id in (select member_id , count(*) as cnt, sum(sale) as sales ~~~~~~)  도 가능

 

-- 에러남 : where member_in (select~~~~ limit 1)

/* select
c1.member_name, c2.review_text,c2.review_date
from MEMBER_PROFILE as c1 inner join 
rest_review  as c2 on c1.member_id=c2.member_id 

where member_id in
(select member_id, count(*) as review_count
from rest_review
group by member_id
order by count(*) DESC
limit 1) 
ORDER BY REVIEW_DATE, REVIEW_TEXT */

-- SQL 실행 중 오류가 발생하였습니다.
-- This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
-- in 안에 limit를 쓸수 없다!!!!!

 

 

2. 따라서 해당 구문은 where 절에서 in 이 아닌 = 로 바꿔야 하며

특정 컬럼이 같다 이므로! 반드시 서브쿼리에는 그 특정 컬럼만이 존재해야한다!!!!

 

WHERE c1.member_id = (
select member_id
from rest_review
group by member_id
order by count(REVIEW_ID) DESC
limit 1)

 

SELECT c1.member_name, c2.review_text,date_format(c2.review_date, '%Y-%m-%d') as review_date_f
FROM MEMBER_PROFILE as c1 inner join rest_review as c2 on c1.member_id=c2.member_id
WHERE c1.member_id = (
select member_id
from rest_review
group by member_id
order by count(REVIEW_ID) DESC
limit 1)
order by date_format(c2.review_date, '%Y-%m-%d') , c2.review_text

댓글