Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 페이스북
- Route53
- 안드로이드
- AWS
- ios
- angular4
- JavaScript
- node
- swift
- 감사일기
- nextjs
- NeXT
- php
- 웹뷰
- https
- angular
- beanstalk
- S3
- react
- hybrid
- 네이티브
- cors
- TypeScript
- Elastic Beanstalk
- Android
- fanzeel
- 카카오톡
- 알려줌
- node.js
- 도메인
Archives
- Today
- Total
쪼렙 as! 풀스택
MySQL, 정렬한 기준으로 1:1로 Join 해서 데이터 가져오기. group by 안쓰고 해결;; 본문
정말 어렵고 힘들었다.
너무 힘들었어서, 자세히 쓰기도 귀찮다.
내가 원한 결과.
1:N 의 데이터가 나오는 INNER JOIN 을 한후,
'dealAt' 이라는 컬럼으로 DESC 정렬을 한 후에,
가장 최신의 데이터 하나만 선택해서,
결과적으로 1:1 의 데이터만 가져오는 JOIN 을 하고 싶었다.
첫번째 시도. 서브쿼리를 이용해서, JOIN 을 한 후, Group BY 를 하는 것이다.
select * from (
select id, name, hp from member order by date desc
)a group by id
[출처] group by 내부 정렬방법|작성자 zgabriel
이런식이였다.
그런데, 서브 쿼리 안에서 이미 JOIN 을 하고 이미 ORDER BY DESC 가 되어있었지만,
GROUP BY 만 하면, 정렬되지 않은채 그룹이 묶여버렸다. 미칠 노릇....
그래서 다른 방법으로,
정렬을 한후, 한 ID기준으로 그룹별 rank 를 메겨주고,
WHERE rank = '1' 인것만 가져오기로 했다.
일단, 그룹별 rank 메기는 법 참고.
https://blackbull.tistory.com/43
이것을 참고해서, 조인을 하고, 정렬을 한후, 랭크를 먹이고, rank = '1'인것만 가져와서 해결하였다.
SELECT pnu, lat, lng, dealAt, price, rnum FROM (
SELECT *,
(CASE @vpnu WHEN A.pnu THEN @rownum:=@rownum+1 ELSE @rownum:=1 END) rnum,
(@vpnu:=A.pnu) vpnu
FROM (
SELECT T.pnu, T.lat, T.lng, D.dealAt, D.price FROM my_table_toji T
INNER JOIN my_table_deal D ON T.pnu = D.pnu
WHERE T.lat > 37.4 AND T.lng > 127.0 AND T.lat < 37.4 AND T.lng < 127.0
ORDER BY T.pnu, D.dealAt DESC
)A
)B
WHERE B.rnum = '1';
'개발 일지 > Web & Server' 카테고리의 다른 글
React - localhost 에서 cookie samesite 이슈 해결하기. (0) | 2020.09.06 |
---|---|
안드로이드 하이브리드앱 웹뷰 WebView 에서 카카오톡 로그인 (앱) 사용하기 (2) | 2019.11.23 |
iamport 이용하여, 정기결제 붙이기. (0) | 2019.08.15 |
메일건 mailgun.com 에서 메일링 리스트 관리하기, 메일링 리스트에 속해있는 사람들에게 모두 메일 보내기. (0) | 2019.02.18 |
React - drag-list 로 항목 순서 변경하기. (0) | 2019.02.18 |
Comments