用于在 varchar 字段中选择最小/最大值的 Mysql 查询

Posted

技术标签:

【中文标题】用于在 varchar 字段中选择最小/最大值的 Mysql 查询【英文标题】:Mysql query for selecting min/max values in a varchar field 【发布时间】:2011-09-22 09:59:26 【问题描述】:

所以我有一个 varchar 列,它应该存储产品价格(不要问我是怎么做到的,但现在我没有选择改变这个......叹气),它也可以是空白的,或包含文本之一(字面意思)“null”、“OUT”,其中两者都表示价格为 0。找到此列的 MIN 和 MAX 值的最佳和最有效的方法是什么?

PS:我对 php/mysql 混合解决方案持开放态度,因为我需要最优化和最有效的方法。这张桌子真的很大……

【问题讨论】:

我想我会添加一个数字列和一个触发器来计算它。如果您经常访问数字,最好将它们转换一次,以节省响应时间 【参考方案1】:

这样的事情应该有效并且相当有效。不过,无论如何它都不会很快。

SELECT
    MIN(CAST(price AS DECIMAL(8,2))) as price_min,
    MAX(CAST(price AS DECIMAL(8,2))) as price_max
FROM products
WHERE price NOT IN('', 'null', 'OUT')

在测试之后,我注意到显然转换是自动完成的,所以你可以这样做:

SELECT
    MIN(price) as price_min,
    MAX(price) as price_max
FROM products
WHERE price NOT IN('', 'null', 'OUT')

【讨论】:

在我的情况下,铸造没有自动发生,它必须明确设置,否则结果如下:99429 > 10000032

以上是关于用于在 varchar 字段中选择最小/最大值的 Mysql 查询的主要内容,如果未能解决你的问题,请参考以下文章

数据库中字段的类型选择

sql server 查询中是不是需要嵌套子选择来选择最大的 1 个字段和最小的另一个?

跨字段选择最小值和最大值并按用户聚合

MySQL的VARCHAR最大值是多少

oracle中字段类型varchar2最大长度是多少?

Oracle的CLOB大数据字段类型(转)