雖然你的輸出顯得撲朔迷離。然而我給了以下的答案:
SOLUTION #1
SELECT
carsTable1.car_name,
carsTable1.price,
CASE WHEN ABS(carsTable1.price - (SELECT price FROM cars WHERE car_name='car 2')) = 0 THEN NULL ELSE
ABS(carsTable1.price - (SELECT price FROM cars WHERE car_name='car 2')) END diff
FROM
(SELECT
@rn := @rn + 1 row_number,
cars.car_name,
cars.price
FROM cars, (SELECT @rn := 0) var
) carsTable1;
Demo Here
樣品輸入:
car_name price
car 1 100
car 2 200
car 3 300
樣本輸出:
car_name price diff
car 1 100 100
car 2 200 NULL
car 3 300 100
注:的car 2
價格與汽車的其餘部分的價格進行比較。所以結果顯示null
爲car 2
,因爲它是參考車。
如果我誤解了你的要求,那麼它一定是:你想連續行即之間的價格差異(No car,car1),(car1,car2), (car2,car3), (car3,car4)....
所以在這種情況下,你可以通過下面的查詢:
SOLUTION #2
SELECT
car_name,
cars.price,
CASE WHEN @currentPrice = 0 THEN NULL ELSE ABS(cars.price - @currentPrice) END AS diff,
@currentPrice := price
FROM cars ,(SELECT @currentPrice := 0) var
ORDER BY car_name
SQL FIDDLE BASED ON THIS QUERY
如果你想omit the fourth column
:
SELECT
t.car_name,
t.price,
t.diff
FROM
(
SELECT
car_name,
cars.price,
CASE WHEN @currentPrice = 0 THEN NULL ELSE (cars.price - @currentPrice) END AS diff,
@currentPrice := price
FROM cars ,(SELECT @currentPrice := 0) var
ORDER BY car_name) t
SQL FIDDLE BASED ON THIS QUERY
請解釋輸出位 – 1000111
有差異被反對的價格計算與其餘的第一輛車? – 1000111
讓我更新我的問題......這將很容易理解 – user3172982