Scenario: 이번 프로젝트를 할때 설문조사를 실행하여 사람과 사람간의 유사한답변을 찾은사람끼리 매칭시켜주는 기능을 만들고자 했었다.


Solutions: 맨처음에는 주관식을 하여 단어간의 유사성을 찾아 매칭시켜줄려고 했지만, 객관식으로 하는것이 더 깔끔 할 것같아서 바꿈


1.테이블 구조(간단함)

SQL 0.19 KB
  1. CREATE TABLE MBER_TQ
  2. (  
  3.     TQ_IDX         NUMBER  PRIMARY KEY,
  4.     MBER_EMAIL      varchar2(50) NULL,
  5.     TQ_QUESTION     NUMBER NULL,
  6.     TQ_ANSWER       NUMBER NULL,
  7.   DEL_FLAG varchar2(5) DEFAULT 'N'
  8. );


2.설문조사를 시작하자마자 수행되는 쿼리

SQL 0.63 KB
  1. --같은사용자가 재 설문조사를할경우 Init해주는 쿼리(시작하기전에 한번 실행)
  2. UPDATE MBER_TQ
  3. SET DEL_FLAG = 'Y'
  4. WHERE MBER_EMAIL = '1@gmail.com';
  5.  
  6.  
  7. --답변을 선택할때마다 동적으로 실행되는 인서트쿼리
  8. INSERT INTO MBER_TQ VALUES(SEQ_MBER_TQ_IDX.NEXTVAL ,'97@gmail.com' ,1,2,'N');
  9. INSERT INTO MBER_TQ VALUES(SEQ_MBER_TQ_IDX.NEXTVAL ,'98@gmail.com' ,1,1,'N');
  10. INSERT INTO MBER_TQ VALUES(SEQ_MBER_TQ_IDX.NEXTVAL ,'99@gmail.com' ,1,3,'N');
  11. INSERT INTO MBER_TQ VALUES(SEQ_MBER_TQ_IDX.NEXTVAL ,'100@gmail.com' ,1,4,'N');
  12. INSERT INTO MBER_TQ VALUES(SEQ_MBER_TQ_IDX.NEXTVAL ,'101@gmail.com' ,1,2,'N');



3.핵심쿼리(내가 선택한 답변을 db에서 다른사람이 선택한 답변과 비교하여 상위 4명을 잘라서 보여줌)

SQL 0.77 KB
  1. SELECT MBER_NAME, MBER_IMG, MBER_INFO_IDX, MBER_SKILL, MBER_INTRODUCE, MI.MBER_EMAIL, SCORE
  2. FROM(SELECT MBER_EMAIL, SCORE
  3.      FROM  
  4.       (SELECT A.MBER_EMAIL ,SUM(B.SCORE) AS SCORE
  5.        FROM MBER_TQ A JOIN
  6.         (SELECT  MBER_EMAIL, TQ_QUESTION, TQ_ANSWER, 1 SCORE
  7.          FROM MBER_TQ
  8.          WHERE MBER_EMAIL='a@GMAIL.COM'
  9.          AND DEL_FLAG != 'Y') B
  10.        ON A.TQ_QUESTION = B.TQ_QUESTION
  11.        AND A.TQ_ANSWER = B.TQ_ANSWER
  12.        AND A.MBER_EMAIL != 'a@GMAIL.COM'
  13.        AND DEL_FLAG != 'Y'
  14.        AND SCORE IS NOT NULL
  15.        GROUP BY A.MBER_EMAIL
  16.        ORDER BY SUM(B.SCORE) DESC)
  17.        WHERE ROWNUM <= 4) GENIE, MBER_INFO MI ,MBER
  18. WHERE GENIE.MBER_EMAIL = MI.MBER_EMAIL
  19. AND MBER.MBER_EMAIL = MI.MBER_EMAIL
  20. ORDER BY GENIE.SCORE DESC;


+ Recent posts