簡體   English   中英

如何從子查詢中的 varchar 列中獲取 select MAX

[英]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 時,使用SIGNEDUNSIGNED作為目標。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM