Scenario: 이번 프로젝트를 할때 설문조사를 실행하여 사람과 사람간의 유사한답변을 찾은사람끼리 매칭시켜주는 기능을 만들고자 했었다.
Solutions: 맨처음에는 주관식을 하여 단어간의 유사성을 찾아 매칭시켜줄려고 했지만, 객관식으로 하는것이 더 깔끔 할 것같아서 바꿈
1.테이블 구조(간단함)
- CREATE TABLE MBER_TQ
- (
- TQ_IDX NUMBER PRIMARY KEY,
- MBER_EMAIL varchar2(50) NULL,
- TQ_QUESTION NUMBER NULL,
- TQ_ANSWER NUMBER NULL,
- DEL_FLAG varchar2(5) DEFAULT 'N'
- );
2.설문조사를 시작하자마자 수행되는 쿼리
- --같은사용자가 재 설문조사를할경우 Init해주는 쿼리(시작하기전에 한번 실행)
- UPDATE MBER_TQ
- SET DEL_FLAG = 'Y'
- WHERE MBER_EMAIL = '1@gmail.com';
- --답변을 선택할때마다 동적으로 실행되는 인서트쿼리
- INSERT INTO MBER_TQ VALUES(SEQ_MBER_TQ_IDX.NEXTVAL ,'97@gmail.com' ,1,2,'N');
- INSERT INTO MBER_TQ VALUES(SEQ_MBER_TQ_IDX.NEXTVAL ,'98@gmail.com' ,1,1,'N');
- INSERT INTO MBER_TQ VALUES(SEQ_MBER_TQ_IDX.NEXTVAL ,'99@gmail.com' ,1,3,'N');
- INSERT INTO MBER_TQ VALUES(SEQ_MBER_TQ_IDX.NEXTVAL ,'100@gmail.com' ,1,4,'N');
- INSERT INTO MBER_TQ VALUES(SEQ_MBER_TQ_IDX.NEXTVAL ,'101@gmail.com' ,1,2,'N');
3.핵심쿼리(내가 선택한 답변을 db에서 다른사람이 선택한 답변과 비교하여 상위 4명을 잘라서 보여줌)
- SELECT MBER_NAME, MBER_IMG, MBER_INFO_IDX, MBER_SKILL, MBER_INTRODUCE, MI.MBER_EMAIL, SCORE
- FROM(SELECT MBER_EMAIL, SCORE
- FROM
- (SELECT A.MBER_EMAIL ,SUM(B.SCORE) AS SCORE
- FROM MBER_TQ A JOIN
- (SELECT MBER_EMAIL, TQ_QUESTION, TQ_ANSWER, 1 SCORE
- FROM MBER_TQ
- WHERE MBER_EMAIL='a@GMAIL.COM'
- AND DEL_FLAG != 'Y') B
- ON A.TQ_QUESTION = B.TQ_QUESTION
- AND A.TQ_ANSWER = B.TQ_ANSWER
- AND A.MBER_EMAIL != 'a@GMAIL.COM'
- AND DEL_FLAG != 'Y'
- AND SCORE IS NOT NULL
- GROUP BY A.MBER_EMAIL
- ORDER BY SUM(B.SCORE) DESC)
- WHERE ROWNUM <= 4) GENIE, MBER_INFO MI ,MBER
- WHERE GENIE.MBER_EMAIL = MI.MBER_EMAIL
- AND MBER.MBER_EMAIL = MI.MBER_EMAIL
- ORDER BY GENIE.SCORE DESC;
'To be Developer > DataBase' 카테고리의 다른 글
트랜잭션이란 무엇일까? (0) | 2019.11.12 |
---|---|
[윈도우10]mysql 5.7.10 수동 설치기 (0) | 2017.07.25 |
[ORACLE / SQL] 문자열 패턴매칭, 유사도 분석 (0) | 2017.05.17 |
[SQL]원하는 사용자 계정내에서 모든 테이블 삭제하기 (0) | 2017.01.20 |
[Oracle]계정생성및 권한주는 쿼리 (0) | 2017.01.18 |