mysql 쿼리 질문입니다.

mysql 쿼리 질문입니다.

작성일 2022.09.15댓글 2건
    게시물 수정 , 삭제는 로그인 필요

안녕하세요 mysql 에서 같은 시간대에 들어온 데이터 중에 큰것만 출력하는 문제 입니다.

제가 작성한 쿼리는 아래와 같습니다.

select ID, board_date, board_time, max(BOARD_TIME), sb, water*10 
from boram 
where 
mb='2000' 
and  sb='1' 
and board_time LIKE '___00___'
and id > 3226
group by water
order by ID desc 
limit 300;

결과값은 아래와 같습니다.
# ID,       board_date,  board_time, max(BOARD_TIME), sb, water*10
24913 2022-09-14 23:00:15 23:00:40              1 9930
24213 2022-09-14 22:00:40 22:00:40              1 9710
24209 2022-09-14 22:00:15 22:00:15           1 9700
23511 2022-09-14 21:00:40 21:00:40            1 9430
23506 2022-09-14 21:00:15 21:00:15           1 9420

질문입니다.
ID 24213과 24209는 동일하게 22시00분에 출력되었는데 water*10 필드의 큰값 1줄만 출력되게 하고 싶습니다. (분홍색)
마찬가지로 23511과 23506  또한 21시00분에 값이 2개 인데 큰값 1개만 출력하고 싶습니다. (하늘색)

쿼리에 무엇을 더 넣어야 할까요? 도와주세요




#mysql 쿼리문 #mysql 쿼리 로그 #mysql 쿼리 튜닝 #mysql 쿼리 이력 조회 #mysql 쿼리 실행 #mysql 쿼리 속도 측정 #mysql 쿼리 실행 시간 확인 #mysql 쿼리 속도 개선 #mysql 쿼리 실행 순서 #mysql 쿼리 캐시 삭제

profile_image 익명 작성일 -

MySQL 8.0 이상 버전이면, ROW_NUMBER() OVER()라는 순위 구하는 분석함수를 쓰면 간단히 해결될 겁니다.

어떤 과제일 지도 몰라 전문을 다 고쳐드리지는 않으니, 실제 적용은 직접 해 보시기 바랍니다.

기본 원리는 group by와 유사한 개념의 partition by와 순위를 정할 order by의 조합으로,

원하는 그룹 내의 순위를 정의하는 것 함수입니다.

우선 그룹을 지을 일자+시간+분 까지의 데이터를 만드셔서 partition by 안에 넣어주면 거의 끝난겁니다.

(한 컬럼으로 만들던 여러 컬럼을 ,로 넣던 결과는 동일합니다.)

그리고 group by water만 적었는데,

group by에는 max/min, count 등의 집계함수로 감싼 컬럼 이외에는 모두 적는게 정상적인 쿼리입니다.

기존 쿼리의 결과를 정확히 확인하시기 바랍니다. 그러므로 답변에선 일단 부정확한 group by 표현은 빼겠습니다.

select * from( select row_number() over(partition by 일자+시+분 order by water*10 desc) as num , boram.* from boram where mb='2000' and sb='1' and board_time LIKE '___00___' and id > 3226 order by ID desc limit 300 ) A where num = 1 -- 일시분으로 그룹핑된 유형들 중 water*10이 큰 것 한건씩만 조회 ;

만약 8.0 이전 버전이라면,

row_number() over()의 결과와 동일한 num순위가 나오도록 self-join으로 만들 수도 있습니다.

건승하시길~

profile_image 익명 작성일 -

좀 이상한 쿼리인데.

with x as ( select board_date, substr(board_time, 1, 5) bt, max(water) w from boram where mb='2000' and sb='1' and board_time LIKE '___00___' and id > 3226 group by board_date, substr(board_time, 1, 5) ) select b.ID, b.board_date, b.board_time, b.sb, b.water*10 from boram b, x where b.mb='2000' and b.sb='1' and b.board_date = x.board_date and substr(b.board_time, 1, 5) = x.bt and b.water = x.w and b.id > 3226 order by b.ID desc limit 300;

mysql 쿼리 질문입니다.

... 제가 작성한 쿼리는 아래와 같습니다. select ID, board_date, board_time, max... 9420 질문입니다. ID 24213과 24209는 동일하게 22시00분에 출력되었는데...

MySQL 쿼리 질문입니다

위와 같은 테이블에서 아래와 같이 한사람당 최근날짜 2개씩 추출하는 쿼리는 어떻게 작성해야 하나요? Mysql 버전은 5.6.25입니다...ㅠㅠ...

mysql 초보 쿼리 질문

mysql 쿼리 도움요청드려요 아래처럼 privacy 테이블에 존재하는 name들에... 하는 쿼리는 어떻게 짜야 할까요?? MySQL Update Join 으로 검색하면 자료들 많이...

mysql 쿼리 질문입니다.

쿼리 결과로 list가 반환되는 A 쿼리가 있고, 쿼리 결과로 단일컬럼의 여러 row가 반환되는 B 쿼리가 있습니다. A 쿼리 수행 결과는 ["01", "11"] 이고 B 쿼리 수행...

MySQL 쿼리 질문입니다

... 작성하는 쿼리를 알고 싶습니다 테이블 작성은 다음과 같이... MySQL은 피벗함수를 제공하지 않아서 쿼리를 짜야합니다. 아래 링크...

mysql 쿼리 질문입니다.

... 해당 쿼리에서 Unknown column 't1.rnk' in 'on clause' 오류가 나는데 해결방법 알려주시면 감사하겠습니다. select row_number() over...

mysql 쿼리 질문입니다.

안녕하세요 mysql 쿼리에 대한 질문입니다. inperno라는 사용자가 어떤... sql문의 sum과 group by를 사용하시면 될듯 보이네요.. sql 책이나 강좌 싸이트에서 sum...

간단한 mysql쿼리 질문입니다.

... 음 MySQL 3.x 버전에서는 서브쿼리가 지원되지 않기에 하나의 쿼리로 해결할 순 없습니다. 쿼리를 두번 사용하셔야 하겠네요. $arr...

mysql 쿼리 질문!

... mysql 쿼리 질문드립니다 게시물 최신 작성된 순으로 회원을 묶어 회원정보 테이블과 조인하여 정렬하고 싶은데 검색해보고 쿼리를...