SELECT
*
FROM
car_rental_company_car
WHERE
options LIKE '%네비게이션%'
ORDER BY
car_id DESC
;
options REGEXP '네비게이션'
이라고 해도 됨SELECT
board_id
, writer_id
, title
, price
, CASE
WHEN `status` = 'SALE' THEN "판매중"
WHEN `status` = 'RESERVED' THEN "예약중"
WHEN `status` = 'DONE' THEN "거래완료"
ELSE "미분류"
END AS "STATUS"
FROM
used_goods_board
WHERE
DATE(created_date) = '2022-10-05'
ORDER BY
board_id DESC
;
WHEN status = 'DONE' THEN "거래완료"
대신 ELSE "거래완료"
로 작성해도 됨DATE(created_date) = '2022-10-05'
대신 created_date = '2022-10-05'
이나 DATE_FORMAT(created_date, '%Y-%m-%d') = '2022-10-05
써도 됨IF를 중첩해서 쓴 풀이도 있었음
IF (STATUS = 'SALE', "판매중", IF(STATUS = 'RESERVED', "예약중", "거래완료")) AS STATUS
CASE문을 이런 식으로 써도 된다고 함
CASE `STATUS`
WHEN 'SALE' THEN '판매중'
WHEN 'RESERVED' THEN '예약중'
ELSE '거래완료'
END AS `STATUS`
appointment | patient | doctor |
---|---|---|
진료예약일시, 진료예약번호, 환자번호, 진료과코드, 의사ID, 예약취소여부, 예약취소날짜 | 환자이름, 환자번호 | 의사ID, 의사이름 |
SELECT
a.apnt_no
, p.pt_name
, a.pt_no
, a.mcdp_cd
, d.dr_name
, a.apnt_ymd
FROM
appointment a
JOIN patient p
JOIN doctor d
ON a.pt_no = p.pt_no
AND a.mddr_id = d.dr_id
WHERE
DATE(a.apnt_ymd) = '2022-04-13'
AND a.apnt_cncl_yn = 'N'
AND a.mcdp_cd = 'cs'
ORDER BY
a.apnt_ymd
;
WITH apnt AS (
SELECT
*
FROM
appointment
WHERE
DATE_FORMAT(apnt_ymd, '%Y-%m-%d') = '2022-04-13'
AND mcdp_cd = 'cs'
AND apnt_cncl_yn = 'N'
)
SELECT
apnt_no
, pt_name
, apnt.pt_no
, apnt.mcdp_cd
, dr_name
, apnt_ymd
FROM
apnt
JOIN patient p
ON apnt.pt_no = p.pt_no
JOIN doctor d
ON apnt.mddr_id = d.dr_id
ORDER BY
apnt_ymd
;
SELECT
car_id
, IF(MAX('2022-10-16' BETWEEN start_date AND end_date), '대여중', '대여 가능') AS availability
FROM
car_rental_company_rental_history
GROUP BY
car_id
ORDER BY
car_id DESC
;
🡆 '2022-10-16' BETWEEN start_date AND end_date
는 start_date와 end_date 사이에 2022년 10월 16일이 있으면 1(true), 없으면 0(false) 반환
🡆 car_id별로 그룹화(GROUP BY) 한 후 MAX 집계함수를 사용하면 한 번이라도 대여 기간에 2022년 10월 16일이 포함되어 있었던 차는 1, 그렇지 않은 차는 0으로 표시됨
그룹화 시 MAX() 함수 사용 이유
- MAX() 함수는 그룹화 된 데이터에서 가장 큰 값을 반환
- 조건이 참인 값이 존재하하는지 확인하는 데 사용
- 그룹 내에서 해당 조건이 한 법이라도 만족되는 경우가 있는지 확인할 수 있음
- 각 자동차는 여러 번 대여될 수 있어 대여 기록이 여러 개임 → car_id를 기준으로 그룹화하여 각 자동차에 대한 여러 기록을 하나로 묶어 처리
WITH cte AS (
SELECT
DISTINCT car_id
FROM
car_rental_company_rental_history
WHERE
car_id NOT IN (
SELECT
DISTINCT car_id
FROM
car_rental_company_rental_history
WHERE
start_date <= '2022-10-16'
AND '2022-10-16' <= end_date
)
)
SELECT
h.car_id
, CASE
WHEN c.car_id IS NULL THEN '대여중'
ELSE '대여 가능'
END AS availability
FROM
car_rental_company_rental_history h
LEFT JOIN cte c
ON h.car_id = c.car_id
GROUP BY
h.car_id
ORDER BY
h.car_id DESC
;
WITH RENTAL_STATUS AS (
SELECT DISTINCT CAR_ID,
CASE
WHEN EXISTS (
SELECT 1
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE CAR_ID = CRCRH.CAR_ID
AND '2022-10-16' BETWEEN START_DATE AND END_DATE
) THEN '대여중'
ELSE '대여 가능'
END AS AVAILABILITY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY CRCRH
)
SELECT CAR_ID, AVAILABILITY
FROM RENTAL_STATUS
ORDER BY CAR_ID DESC;
SELECT CAR_ID, IF(SUM(IF (START_DATE <= "2022-10-16" AND END_DATE >= "2022-10-16", 1, 0)), "대여중", "대여 가능") AS AVAILABILITY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
ORDER BY CAR_ID DESC;
def solution(arr):
return sum(arr)/len(arr)
def solution(arr):
if len(arr) == 0:
return 0
else:
return sum(arr) / len(arr)
# 같은 풀이 다른 작성법
def solution(arr):
retirm sum(arr) / len(arr) if arr else 0
from statistics import mean
def solution(arr):
return mean(arr)