2009-03-17 6 views
2

SQL 데이터베이스에서 얻은 값을 기반으로 일부 추세를 계산하고 싶습니다. 특히 하나의 열에서 값의 증가율을 얻는 데 관심이 있습니다 (값이 감소한 경우 값은 음수 여야 함)SQL - 숫자 열의 값 증가 비율을 계산하십시오.

누군가이 문제를 어떻게 해결해야합니까?

저장 프로 시저를 사용할 수 없습니다.

감사합니다.

내 표는

날짜 (숫자) 다음과 같은 열, 월 (숫자), 주문 (숫자), I는 숫자에 변화의 %를 계산하려면

(실제) 가격이 한 달에서 다음 달에받은 주문 수 또한 방향을 고려해야합니다. 즉 매출이 감소한 경우 반환되는 값은 -ve 여야합니다. 경향을 계산하기 위해

+0

"어떻게하면 좋을지 조언 해 줄 수 있습니까?" 스키마에 대한 기본 정보가 부족하지 않습니다. – kquinn

답변

3

나는 sqllite가 변수를 허용하는지 잘 모르겠다. 그러나 이것이 MySQL에서하는 방법이다. 나는 이것을 시험하고 매력처럼 작동했습니다 : 10 ~ 20 증가 100 %, 46 ~ 40 감소 -13.04 % 인쇄.

는 희망이 sqllite에서 유사 : 물론

SELECT 
    CONCAT(
    FORMAT(
     IF(@prev AND SUM(orders) <> @prev, 
      -1 * 100 * (1 - SUM(orders)/@prev), 
      0 
     ) 
     , 2) 
    , '%') AS variation, 
    @prev := SUM(orders) AS orders 
FROM 
    (SELECT @prev := NULL) init, 
    product 
GROUP BY 
    id_product 
ORDER BY 
    month 

, 당신은 당신이 필요로 출력을 조정할해야합니다. 이것은 현재 백분율을 2 자리 소수점으로 형식화하고 끝에 "%"를 추가합니다.

1

, 당신은 당신이 관심있는 값의 역사적 데이터를 저장해야합니다. 당신이 년 + 달 (YYYYMM)와 정수 열이있는 경우

1

이 유용해야

cast(
    cast(year(date) as nvarchar) + 
    replicate('0',2-len(cast(month(date) as nvarchar))) + 
    cast(month(date) as nvarchar) 
as int) 

다음 그룹을 지정하고 이전 값을 가져 와서 계산하면됩니다.

select yearmonth, 
     sum(t.orders), 
     (sum(t.orders)/(select top 1 sum(orders) 
         from table 
         where yearmonth<t.yearmonth 
         group by yearmonth 
         order by yearmonth desc)-1)*100. as pct 
from table t 
group by yearmonth 

T-SQL 구문, 당신은 sqlite가

PS에서 사용할 수 있기를 바랍니다 : 제로 검사에 의한 구분이 더 문제를 방지하기 위해 수행해야합니다.

1

열 날짜에 대해 확실하지,하지만 한달에 단 1 행이있는 경우, 대답은 할 수있다 (I SQLite는되어 있지 않지만,이 대답은 ANSI의 SQL 생각) :

select t.date 
,  t.month 
,  t.orders 
,  case when t2.orders = 0 then 
      99999.0 
     else 
      100.0 * (t.orders - t2.orders)/t2.orders 
     end "increase" 
from t 
left join t t2 on t2.month = t.month - 1 
order by t.month