database.sarang.net
UserID
Passwd
Database
DBMS
ㆍMySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MySQL Q&A 31336 게시물 읽기
No. 31336
상태값을 쿼리로 구하려 합니다.
작성자
안용재(vampireahn)
작성일
2021-04-07 15:30ⓒ
2021-04-07 15:35ⓜ
조회수
3,926

고사장 테이블

test_place_idx  
test_place_num 고사장번호
test_place_name 고사장명


시험정보 테이블

test_regist_idx  
test_name 시험명
receipt_start_date 시작 접수기간
receipt_end_date 종료 접수기간
status 상태 - W : 대기, I - 접수중, E - 마감


고사장 정원 정보 테이블

test_area_info_idx  
test_regist_idx 시험정보 idx
test_place_idx 고사장 idx
personnel 고사장 정원


결제 테이블

payment_idx  
test_regist_idx 시험정보 idx
test_place_idx 고사장 idx


위와 같은 3개의 테이블이 있습니다.


단순하게 시험정보 테이블 만으로 접수기간만 오늘날자와 비교하여 접수기간 내에 포함되어있으면 상태값을 변경 하는 쿼리는 구했는데..

SELECT a.*, b.*

 

  FROM id_test_regist a

 

LEFT OUTER JOIN (

 

SELECT test_regist_idx, case

 

when receipt_start_date > DATE(NOW()) then 'W'

 

when (receipt_start_date <= DATE(NOW()) AND receipt_end_date >= DATE(NOW())) then 'I'

 

when receipt_start_date < DATE(NOW()) then 'E'

 

END now_status

 

  FROM id_test_regist

 

) b ON a.test_regist_idx = b.test_regist_idx

 

 WHERE 1 = 1


시험정보 테이블에서 시작 접수기간, 종료 접수기간을 오늘 날자와 비교하며, 추가로 고사정 정원 정보에 입력된 인원과 결제테이블에서 결제된 토탈값으로 

비교하여 고사정 정원 정보에 입력된 인원보다 많거나 같으면 상태값을 마감으로 표현 하려고 합니다.

고사장 정원 정보에는 1개 이상의 시험정보 idx, 고사장 idx의 값을 가진데이터가 1개 이상 있을 수 있습니다.


어떻게 해야 하는지 고수 님들의 가르침 부탁 드립니다.

이 글에 대한 댓글이 총 1건 있습니다.
SELECT a.test_regist_idx
     , a.test_name
     , a.receipt_start_date
     , a.receipt_end_date
     , c.test_place_idx
     , c.test_place_num
     , c.test_place_name
     , b.personnel
     , COUNT(d.payment_idx) cnt
     , CASE WHEN receipt_start_date > NOW() THEN 'W'
            WHEN receipt_end_date   < NOW() THEN 'E'
            WHEN b.personnel <= COUNT(d.payment_idx) THEN 'E'
            ELSE 'I'
        END now_status
  FROM id_test_regist a
 INNER JOIN id_test_area_info b
    ON a.test_regist_idx = b.test_regist_idx
 INNER JOIN id_test_place  c
    ON b.test_place_idx  = c.test_place_idx
  LEFT OUTER JOIN id_payment d
    ON b.test_regist_idx = d.test_regist_idx
   AND b.test_place_idx  = d.test_place_idx
 GROUP BY a.test_regist_idx
     , a.test_name
     , a.receipt_start_date
     , a.receipt_end_date
     , c.test_place_idx
     , c.test_place_num
     , c.test_place_name
     , b.personnel
;
마농(manon94)님이 2021-04-08 11:02에 작성한 댓글입니다.
이 댓글은 2021-04-08 11:02에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
31339mariadbbackup이 aws rds는 안되는건가요??
이현종
2021-05-14
4459
31338데이터베이스 분리 [1]
김군
2021-05-02
4178
31337MYSQL 인덱스 및 제약조건 생성시 [1]
축구선수
2021-04-27
3843
31336상태값을 쿼리로 구하려 합니다. [1]
안용재
2021-04-07
3926
31334특정시간이 포함된 시간을 구하고 싶습니다. [2]
피어스
2021-03-29
3624
31333mysqldump 파일명 지정 관련 질문 [2]
왕초보
2021-03-17
2978
31332php 에서 원격 mysql 접속
AALS
2021-03-05
2953
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.047초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다