我有一個包含產品每日優惠的表格,其中 OFFERING_ID 是主鍵,還有 PRODUCT_ID。一個 PRODUCT_ID 可以有一個或多個 OFFERING_ID。我試圖在兩個 SNAPSHOT_DAY(兩個日期之間的一個月)中比較 OFFERING_ID 的價格。為了讓事情變得更棘手,可能在兩個日期都存在 OFFERING_ID,或者只是在較早的日期(已售出)或僅在較晚的日期(新上市);我只想比較兩個日期中都有 OFFERING_ID 的情況,所以基本上我想忽略任何帶有 NULL 的日期對。
我的最終目標是計算 OFFERING_ID 的數量,其中 1) 日期之間的價格沒有變化,2) 價格下跌,3) 價格上漲。
我試過創建一個查詢來檢查之前(BEFORE)的價格,另一個來檢查之后(AFTER)的價格,然后是最后一個:
SELECT
COUNT(CASE WHEN BEFORE.PRICE_BEFORE IS NOT NULL AND AFTER.PRICE_AFTER IS NOT NULL AND
BEFORE.PRICE_BEFORE = AFTER.PRICE_AFTER THEN 1 ELSE 0 END) AS SAME_PRICE
,COUNT(CASE WHEN BEFORE.PRICE_BEFORE IS NOT NULL AND AFTER.PRICE_AFTER IS NOT NULL AND
BEFORE.PRICE_BEFORE > AFTER.PRICE_AFTER THEN 1 ELSE 0 END) AS LOWER_PRICE
,COUNT(CASE WHEN BEFORE.PRICE_BEFORE IS NOT NULL AND AFTER.PRICE_AFTER IS NOT NULL AND
BEFORE.PRICE_BEFORE < AFTER.PRICE_AFTER THEN 1 ELSE 0 END) AS HIGHER_PRICE
WHERE
AFTER INNER JOIN BEFORE ON AFTER.OFFERING_ID = BEFORE.OFFERING_ID AND AFTER.PRODUCT_ID = BEFORE.PRODUCT_ID
我只為一個 PRODUCT_ID 運行它,我得到了完全錯誤的結果,即 SAME_PRICE = 24、LOWER_PRICE = 24 和 HIGHER_PRICE = 24。這是完全錯誤的,因為這兩種產品的兩個日期都沒有 24 個 OFFERING_ID。
我正在使用 PostgreSQL。
uj5u.com熱心網友回復:
SELECT
SUM(CASE WHEN BEFORE.PRICE = AFTER.PRICE THEN 1 ELSE 0 END) AS SAME_PRICE,
SUM(CASE WHEN BEFORE.PRICE > AFTER.PRICE THEN 1 ELSE 0 END) AS LOWER_PRICE,
SUM(CASE WHEN BEFORE.PRICE < AFTER.PRICE THEN 1 ELSE 0 END) AS HIGHER_PRICE
FROM
AFTER
JOIN BEFORE ON AFTER.OFFERING_ID = BEFORE.OFFERING_ID AND AFTER.PRODUCT_ID = BEFORE.PRODUCT_ID
您不需要檢查 price 是否為空,因為如果是 - 它將被JOIN.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/313914.html
標籤:PostgreSQL
上一篇:Postgres添加列類別以根據特定列的總和進行查看
下一篇:如何檢查兩列之間的值?
