【问题标题】:MySQL - MIN / MAXMySQL - 最小值/最大值
【发布时间】:2014-11-05 14:49:12
【问题描述】:

我的数据库中有一个字段可以包含一个数字,例如8.00 或范围编号,例如8.00 - 10.00。

如果您将每个数字作为单独的数字,我需要从表中获取 MIN() 和 MAX()。例如当范围为 8.00 - 10.00 时,最小值为 8.00,最大值为 10.00

例子:

PRICE: 2.00-4.00
PRICE: 2.00-10.00
PRICE: 3.00
PRICE: 8.00

MIN = 2.00
MAX = 10.00

有人可以帮忙吗?

谢谢

【问题讨论】:

  • 请添加一些示例数据和预期结果集
  • MAX应该是10.00吗?
  • 对不起,应该!
  • 该字段的数据类型是什么?我怀疑是varchar吗?
  • 除了问题本身,一个小的模型化更新似乎很有用。

标签: mysql


【解决方案1】:

您可以使用substring_indexunion

select min(col),
max(col) 
from (
select 
substring_index(PRICE,'-',1) * 1 col
 from Table1
union 
select 
substring_index(PRICE,'-',-1) * 1 col2
from Table1
  ) t

Demo

【讨论】:

  • 发布此答案时,上帝刚刚吃了一只小猫。尽管数据模型完全损坏,而且查询非常不可靠和糟糕,但这是可能,这并不意味着您应该鼓励 TS 继续走他的歧途。
【解决方案2】:

您应该normalize your database 到 3NF 或 BCNF 以避免进一步的问题。但是,如果您只是对数据库中的内容感到好奇,您可以尝试以下查询:

查询

SELECT
  MIN(TRIM(CASE WHEN INSTR(val, "-") > 0 THEN SUBSTRING(val, 1, INSTR(val, "-")-1) ELSE val END)) min,
  MAX(TRIM(CASE WHEN INSTR(val, "-") > 0 THEN SUBSTRING(val,    INSTR(val, "-")+1) ELSE val END)) max
FROM test;

示例输出

+-------+-------+
| min   | max   |
+-------+-------+
| 1.00  | 30.00 |
+-------+-------+

【讨论】:

    猜你喜欢
    • 2021-06-02
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2011-12-22
    • 1970-01-01
    • 2013-07-25
    • 2016-09-18
    相关资源
    最近更新 更多