[英]How do I use a WHERE clause with a CASE inside a SUM?
我有兩個表,一個是任務列表。 每個任務(行)由一對唯一的story_id
和pos_id
(銷售點ID)指定,並包括last_completed
日期。 另一個表是具有priority
編號的POS列表。
這就是我需要的 :我將要求每個任務x
包括自上次完成以來的時間除以其POS的優先級數量。 我需要每個故事的所有x
的總和超過所有故事的POS。
最重要的是,一些任務從未完成,所以last_completed
為NULL
; 對於那些任務,我想將x
設置為10。
這是我嘗試過的,但我在WHERE
上收到錯誤:
SELECT t.story_id, SUM(
CASE
WHEN t.last_completed IS NULL THEN 10
ELSE DATEDIFF(NOW(), t.last_completed)/p.priority
END
WHERE t.pos_id = p.id) AS weeks
FROM test_task t, test_pos p
GROUP BY story_id;
我也嘗試了與ELSE
在同一行的WHERE
子句,但這也沒有用。
誰能告訴我如何將priority
與SUM
內CASE
的last_completed
日期相關聯?
據推測,這是您想要的查詢:
SELECT t.story_id,
SUM(CASE WHEN t.last_completed IS NULL THEN 10
ELSE DATEDIFF(NOW(), t.last_completed)/p.priority
END) as weeks
FROM test_task t JOIN
test_pos p
ON t.pos_id = p.id
GROUP BY story_id;
您的條件應該在on
子句中用於顯式join
。 這與select
子句中的case
表達式無關。
你已經亂序的條款- from
應該來之前where
。 此外,您需要關閉sum
的括號:
SELECT t.story_id, SUM(
CASE
WHEN t.last_completed IS NULL THEN 10
ELSE DATEDIFF(NOW(), t.last_completed)/p.priority
END) AS weeks
FROM test_task t, test_pos p
WHERE t.pos_id = p.id
GROUP BY story_id;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.