[英]How to select MAX from varchar column in a subquery
在一個表中,varchar 中有兩列“art”和“price”。 “價格”被格式化為貨幣。
與我使用的文章一起找到最高價格:
SELECT art, price FROM books
WHERE price = (SELECT MAX(CAST(REPLACE(REPLACE(price, ',', ''),'.','') AS INT))
FROM books)
它行不通。 請問,有什么問題嗎?
您需要將價格與價格進行比較。 所以,一種方法是:
SELECT b.art, b.price
FROM books b
WHERE b2.price = (SELECT b2.price
FROM books b2
ORDER BY REPLACE(REPLACE(b2.price, ',', ''), '.', '') + 0 DESC
LIMIT 1
);
您應該將值存儲為decimal
/ numeric
類型 - .
建議您有小數部分。 我不建議刪除它,所以:
WHERE b2.price = (SELECT b2.price
FROM books b2
ORDER BY REPLACE(b2.price, ',', '') + 0 DESC
LIMIT 1
);
這用隱式轉換代替了顯式轉換——因為 MySQL 對帶有CAST
的類型有神秘的規則。
最后,這也可以使用 window 函數來處理:
select b.*
from (select b.*,
rank() over (order by REPLACE(b2.price, ',', '') + 0 desc) as seqnum
from books b
) b
where seqnum = 1
當您投射到 integer 時,使用SIGNED
或UNSIGNED
作為目標。
SELECT art, price FROM books
WHERE price = (SELECT MAX(CAST(REPLACE(REPLACE(price, ',', ''),'.','') AS SIGNED))
FROM books)
您應該將數值存儲為數字而不是字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.