>source

나는 테이블이예약다음 열로 :

시작 시간 (타임 스탬프)

슬롯 (int)

예약 된 슬롯을 일별로 그룹화 한 다음 전날 대비 변동률 (%)을 계산하고 싶습니다.

이 쿼리는 거의 동일하지만 어떤 이유로 백분율이 올바르지 않습니다.

SELECT starttime::date AS "Dates", SUM(slots) AS "Slots", 
(SUM(Slots)/LAG(SUM(Slots)) OVER (ORDER BY starttime::date))::NUMERIC(3,2) AS "Change (%)"
FROM cd.bookings
GROUP BY 1;

그리고 이것은 출력입니다.

DATES        Slots  Change(%)
"2012-07-03"    10  NULL
"2012-07-04"    22  2.00
"2012-07-05"    19  0.00
"2012-07-06"    23  1.00
"2012-07-07"    42  1.00
"2012-07-08"    36  0.00
"2012-07-09"    43  1.00

내가 도대체 ​​뭘 잘못하고있는 겁니까?


  • 답변 # 1

    정수가 아닌 값으로 변환전에분할:

    SELECT starttime::date AS "Dates", SUM(slots) AS "Slots", 
           (SUM(Slots) * 1.0 /
            LAG(SUM(Slots)) OVER (ORDER BY starttime::date)
            )::NUMERIC(3,2) AS "Change (%)"
    FROM cd.bookings
    GROUP BY 1;
    
    

    Postgres는 두 피연산자가 정수이면 정수 나눗셈을 수행하므로 0/1은 0.5가 아니라 0입니다.

관련 자료

  • 이전 postgresql - 테이블에서 값을 캡처하고 SQL 함수에서 로컬 변수로 선언
  • 다음 python - 화이트 킹이 체스 판에서 주어진 위치에 있는지 확인하는 부울 함수