[英]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.