0
我有一張用戶表和他們發送的消息的另一個表,我試圖找到消息的平均長度和平均長度如果用戶退休,則顯示一條消息。如果我試試這個:根據MySQL中的特定情況查找列的平均長度
SELECT u.id,
AVG(LENGTH(m.body)) AS avg_msg_length,
AVG(LENGTH(CASE m.is_retired WHEN true THEN m.body ELSE NULL END)) AS avg_msg_length_retired
FROM Users u LEFT OUTER JOIN Messages m
ON u.id = m.sender_id
GROUP BY u.id;
在結果我得到的平均長度不錯,但對於退休人員的平均長度剛好空值的列。
如果我試試這個:
SELECT u.id,
AVG(LENGTH(m.body)) AS avg_msg_length,
AVG(LENGTH(CASE m.is_retired WHEN "true" THEN m.body ELSE NULL END)) AS avg_msg_length_retired
FROM Users u LEFT OUTER JOIN Messages m
ON u.id = m.sender_id
GROUP BY u.id;
我得到的,
ERROR 1054(42S22):未知列 '‘真’' 在 '字段列表'。
我覺得這很奇怪,因爲is_retired字段是一個varchar。
我是否在LENGTH內使用CASE WHEN錯誤?我試圖CASE的第二種形式當過多爲:
AVG(LENGTH(CASE WHEN m.is_retired=true THEN m.body ELSE NULL END)) AS avg_msg_length_retired
,並
AVG(LENGTH(CASE WHEN m.is_retired="true" THEN m.body ELSE NULL END)) AS avg_msg_length_retired
,並得到同樣的結果如上。
獲取長度內工作。但是,錯誤是由於已經在真正使用雙引號的查詢引起的。錯誤是由我認爲錯誤的命令序列引起的。無論如何謝謝! – gorangutan