사례 연구: UDF

SQL Server에서 함수와 저장 프로시저 작성하기

Meghan Kwartler

IT Consultant

택시 운행 비즈니스 문제

  1. EU 사모펀드가 미국 교통 분야 투자 기회를 모색합니다.
  2. 요일별 각 NYC 자치구의 평균 거리당 요금, 이용 건수, 총 운행 시간은 무엇인가요?

노란 택시 사진

SQL Server에서 함수와 저장 프로시저 작성하기

택시 운행 비즈니스 문제

  1. EU 사모펀드가 미국 교통 분야 투자 기회를 모색합니다.
  2. 요일별 각 NYC 자치구의 평균 거리당 요금, 이용 건수, 총 운행 시간은 무엇인가요?
  3. 각 운전사 근무조별로 어떤 자치구 내 픽업 지점을 배정해야 할까요?

노란 택시 사진

SQL Server에서 함수와 저장 프로시저 작성하기

변환 UDF

CREATE FUNCTION dbo.ConvertMileToMeter (@miles numeric)
RETURNS numeric
AS
BEGIN
RETURN (SELECT @miles * 1609.34)
END
CREATE FUNCTION dbo.ConvertCurrency (@Currency numeric, @ExchangeRate numeric)
RETURNS numeric
AS
BEGIN
RETURN (SELECT @ExchangeRate * @Currency)
END
SQL Server에서 함수와 저장 프로시저 작성하기
SELECT TripDistance as 'MileDistance', 
dbo.ConvertMileToMeter (TripDistance) as 'MeterDistance', 
FareAmount as 'FareUSD', 
dbo.ConvertCurrency (FareAmount, '.78') as 'FareGBP' 
FROM dbo.YellowTripData
+--------------+---------------+---------+---------+
| MileDistance | MeterDistance | FareUSD | FareGBP |
|--------------+---------------+---------+---------+
|  1.10        | 1609          |  6      | 6       |
|  0.02        | 0             | 52      | 52      |
|  0.50        | 1609          |  4      | 4       |
|  7.75        | 12875         | 22      | 22      |
|  0.80        | 1609          |  6      | 6       |
|  0.90        | 1609          |  7      | 7       |
|  1.76        | 3219          |  7      | 7       |
|  8.47        | 12875         | 24      | 24      |
|  2.40        | 3219          | 10.50   | 11      |
| 12.60        | 20921         | 60      | 60      |
|  0.90        | 1609          |  7      | 7       |
+--------------+---------------+---------+---------+
SQL Server에서 함수와 저장 프로시저 작성하기

반복

ALTER FUNCTION dbo.ConvertMileToMeter (
  @miles numeric (18, 2)
) RETURNS numeric (18, 2) as BEGIN RETURN (
  SELECT @miles * 1609.34
) END;
ALTER FUNCTION dbo.ConvertCurrency (
  @Currency numeric (18, 2), 
  @ExchangeRate numeric(18, 2)
) RETURNS numeric (18, 2) AS BEGIN RETURN (
  SELECT @ExchangeRate * @Currency
) END;
SQL Server에서 함수와 저장 프로시저 작성하기

근무조는?

CREATE FUNCTION dbo.GetShift (@Hour int)
RETURNS int
AS
BEGIN
RETURN (CASE 
    WHEN @Hour >= 0 AND @Hour < 9 THEN 1
    WHEN @Hour >= 9 AND @Hour < 18 THEN 2
    WHEN @Hour >= 18 AND @Hour < 24 THEN 3
END)
END;
SQL Server에서 함수와 저장 프로시저 작성하기

근무조 테스트

SELECT 
  DATENAME(hour, PickupDate) AS 'Hour', 
  dbo.GetShift (
    DATENAME(hour, PickupDate)
  ) AS 'Shift' 
FROM YellowTripData 
GROUP BY DATENAME(hour, PickupDate) 
ORDER BY 
  dbo.GetShift (
    DATENAME(hour, PickupDate)
  )
+------+-------+
| Hour | Shift |
|------+-------|
|  3   | 1     |
|  6   | 1     |
|  4   | 1     |
|  2   | 1     |
|  0   | 1     |
|  8   | 1     |
|  5   | 1     |
|  1   | 1     |
|  7   | 1     |
|  9   | 2     |
| 11   | 2     |
| 15   | 2     |
| 14   | 2     |
| ...  | ...   |
+------+-------|
SQL Server에서 함수와 저장 프로시저 작성하기

이제 당신 차례!

SQL Server에서 함수와 저장 프로시저 작성하기

Preparing Video For Download...