Mysq 쿼리문에서 중복허용 2회까지만 허용하는 쿼리

   조회 3093   추천 0    

Mysq  쿼리문에서 중복허용 2회까지만 허용하는 쿼리문을 작성하려고 합니다 


일반적으로 distinct 는 중복 제거 기능인데

중복을 2회까지만 허용하는 

쿼리도 가능할 듯 하다는 생각이 듭니다 

그래서 이것을 한번 해보고 싶습니다 


아마도 group by 와  having  를 통해서

가능할듯 한데 ...  되겠지요?


특정 게시판에서

Distinct  으로 중복제거한 목록을  추출하는 쿼리는 쉬운데

그렇게하면 너무 심한 것 같아서

중복을 한번까지만 허용해주는 목록을 추출하는 쿼리를 작성하고 싶습니다 


그래서 한번도 안해본 쿼리문 도전도 할겸

문의드립니다  


쿼리 도사님들 한 수 지도 부탁드립니다  꾸벅

예전에 나를 도와준 마틴님이란 분이 있어 그분을 기억합니다.
2cpu의 도움주신 많은 분들께 늘 감사드립니다.
☎ HP 010-9678-7900
짧은글 일수록 신중하게.
Group by 결과의 개수가 3보다 작은 목록을 가저와서 셀프 조인 하면 될거 같습니다.
Select
A.Country, a.cnt
From (
SELECT country,COUNT(*) as cnt
FROM author     
GROUP BY country
) a
Where a.cnt < 3;

Mysql은 거의 사용해보진 안았지만 대략 이런 쿼리가 될거 같습니다.
     
허인구마틴 2021-05
감사드립니다
꾸띠웍 2021-05
오라클은 아래처럼만해도 나옵니다
Mysql 은 안된다면 위에처럼 해야겠지요
SELECT country
FROM author   
GROUP BY country
Having count(*) < 3
     
허인구마틴 2021-05
도사님 감사드립니다
DAP박인호 2021-05
허인구마틴 2021-05
제 자신이 having에 대한 개념을 잘못 잡았군요 ㅠㅠㅠ
having 이란 것은 처음 기대와는 전혀 다른 의미였습니다.

즉 having 이란 중복이란 것은 맞는데...
중복이 몇 번된 즉 그 조건에 맞는 것만을 쿼리해서 distict 으로 한개씩만 보여주는 것이였습니다.

원래 목적은 만약 중복이 있다면 두번까지만 가져오고,
그 나머지는 쿼리해서 가져오지 않는 것이였습니다.
결국은 php 으로 동일여부를 체크해서 두번까지만 두고 나머지는 삭제하는 방식으로 해야할 듯 합니다.

결론은 이런 쿼리는 불가능이란 것으로 생각됩니다.
     
꾸띠웍 2021-05
불가능한 쿼리는 없습니다.
원하시는것이 구체적으로 무엇인지만 얘기주시면
2cpu 능력자 분들 많으십니다
제가 자주 얘기하는것중 하나가
프로그램으로 안되는 것은
없고 다만 몰라서 못하고 되더라도 시간이 걸릴뿐입니다.
하나의쿼리로 안된다면 펑션이나 프로시져로 만드셔도 됩니다.
캔위드 2021-05
having 이란 것이 중복이라는게 아니고요...음..
group by 를 쓴다는건 집계 함수를 사용한다는 것인데
이때 그 집계조건을 걸어주는 문장입니다.
그래서 having count(*) < 3 만 가능한게 아니라
having sum(hit) > 100 이런식으로도 가능합니다.

그리고 원하시는건 group by having 으로는 안되고
row_number over partition by 를 이용하셔야 합니다.

가령 메인페이지에 최근 게시물 10개를 보여주는데
하루에 글쓴이가 2번까지는 나오게 한다면 ( 같은날 글 3개 썼다면 첫번째 글은 제외)  다음과 같이 하시면 됩니다.
select a.*
from (
 select row_number() over(partition by 등록일YYYYMMDD, 글쓴이 order by idx desc) rn, a.*
 from 게시판 a) a
where a.rn < 3
order by idx desc
limit 10

"mysql 관련 윈도우 함수"라고 검색하여 공부해 보시고
조금 난해하다 싶으시면 그냥 로직으로 처리하는 것도 방법입니다.
개발은 구현하는 방법이 무척 다양하고 뽀대나는 코드보다는
본인이 확실히 이해하고 익숙한 코드가 더 좋은 방법일 수 있습니다.


QnA
제목Page 4839/5710
2014-05   5155764   정은준1
2015-12   1690158   백메가
2004-07   9324   김건우
2019-07   2189   Steradian
2013-09   9405   김건우
2007-04   5175   안창준
2010-12   10616   참세상맹글기
2013-09   10464   김준유
2023-11   2034   광주동키호테
2004-08   6944   이지언
2018-06   5058   osthek83
2004-08   7030   윤인걸
2007-04   5338   이인
2011-01   8674   김남성
2013-09   10908   해피버그
2022-04   5279   밍돌이
2015-02   6125   NANDROID
2022-04   1955   이유종
2004-09   7244   오경
2020-10   3800   전진
2023-12   1508   다함께싸다구
2013-09   5820   청춘