
저번에 풀다가 어려워서 방치해두었던.. 시간이 지나고야 코테에게 다시 돌아왔다..
뭔가 유레카싶은 게 떠올라서 제출했는데 틀렸다 ..ㅠ
피곤하기도 하고 문제가 어려우니 일단 오늘은 틀린 답을 남겨두고 가겠습니다..
WITH T1 AS (
SELECT tiv_2015
, COUNT(tiv_2015) cnt
FROM Insurance
GROUP BY tiv_2015
), T2 AS (
SELECT CONCAT(lat, ",", lon) loc
, COUNT(CONCAT(lat, ",", lon)) cnt
FROM Insurance
GROUP BY loc
)
SELECT SUM(tiv_2016) tiv_2016
FROM Insurance
WHERE tiv_2015 IN (SELECT tiv_2015
FROM T1
WHERE cnt >= 2)
AND (lat, lon) IN (SELECT CAST(SUBSTRING_INDEX(loc, ',', 1) AS DECIMAL)
, CAST(SUBSTRING_INDEX(loc, ',', 2) AS DECIMAL)
FROM T2
WHERE cnt = 1
)
LeetCode 중급 왜이리 어렵나요 🫥
그래도 다시 돌아온 나 칭찬해 👏👏
WITH T1 AS (
SELECT tiv_2015
, COUNT(tiv_2015) cnt
FROM Insurance
GROUP BY tiv_2015
), T2 AS (
SELECT CONCAT(lat, ",", lon) loc
, COUNT(CONCAT(lat, ",", lon)) cnt
, lat
, lon
FROM Insurance
GROUP BY loc
)
SELECT ROUND(SUM(tiv_2016), 2) tiv_2016 --반올림 추가
FROM Insurance
WHERE tiv_2015 IN (SELECT tiv_2015
FROM T1
WHERE cnt >= 2)
AND (lat, lon) IN (SELECT lat --바꾼 부분
, lon --바꾼 부분
FROM T2
WHERE cnt = 1
)
SELECT ROUND(SUM(tiv_2016), 2) AS tiv_2016
FROM Insurance
WHERE tiv_2015 IN (
SELECT tiv_2015
FROM Insurance
GROUP BY tiv_2015
HAVING COUNT(*) > 1
)
AND (lat, lon) IN (
SELECT lat, lon
FROM Insurance
GROUP BY lat, lon
HAVING COUNT(*) = 1
)
전체적인 형태는 비슷한 것 같은데 이 분의 쿼리가 훨씬 간결하네요.
그룹화후 COUNT(*)를 해주면 그룹별로 카운트를 해준다는 것을 알았습니다!!
SELECT절에서만 COUNT()를 할 수 있다고 생각했어서 코드가 엄청 길어졌던 것 같습니다 ㅎ