繁体   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