【问题标题】:MySQL: MIN() and MAX() against a string valueMySQL:针对字符串值的 MIN() 和 MAX()
【发布时间】:2009-08-18 09:08:15
【问题描述】:

我有一个连接 2 个表的 SQL SELECT 语句。
主表包含产品的其他信息,并与第二个尺寸表相连。
第二个表包含存储为字符串的非数字大小列表,其结构简单如下...

SizeID = 主键
SizeName = 大小的字符串值(即小、中、大)
SizeOrder = 用于对尺寸顺序进行排序的整数值(即 SizeOrder 为 5 表示 Size 大于 SizeOrder 为 2)

我需要 SELECT 语句从尺寸表中返回 MIN() 和 MAX() 尺寸。
但是,由于实际大小存储为字符串,我需要针对 SizeOrder 列运行 MIN() 和 MAX() 函数,但返回 SizeName 列的值。

我目前的尝试如下:

SELECT ProductReference, MIN(SizeOrder) AS MinSizeID, MAX(SizeOrder) AS MaxSizeID, 
(SELECT SizeName FROM Size WHERE SizeOrder = MinSizeID) AS MinSizeText, 
(SELECT SizeName FROM Size WHERE SizeOrder = MaxSizeID) AS MaxSizeText
FROM (Product INNER JOIN Size ON Products.SizeFK = StoneSize.SizeID) 
WHERE ID = 132
GROUP BY ProductReference;

这将返回错误“不支持引用'MinSizeID'(对组函数的引用)”

【问题讨论】:

    标签: sql mysql


    【解决方案1】:

    MySQL 抱怨您在子选择中使用了列的别名,请尝试

    SELECT ProductReference, MIN(SizeOrder) AS MinSizeID, MAX(SizeOrder) AS MaxSizeID, 
    (SELECT SizeName FROM Size WHERE SizeOrder = MIN(Products.SizeOrder)) AS MinSizeText, 
    (SELECT SizeName FROM Size WHERE SizeOrder = MAX(Products.SizeOrder)) AS MaxSizeText
    FROM (Products INNER JOIN Size ON Products.SizeFK = StoneSize.SizeID) 
    WHERE ID = 132
    GROUP BY ProductReference;
    

    虽然我不确定这是否会抱怨选择不在 group by 中的列。

    【讨论】:

    • 我认为正如您所期望的那样,您的建议返回一个错误,指出“组函数的使用无效”
    • 这不是我所期望的。这可能是因为我们感兴趣的 MIN(SizeOrder) 不是 SizeOrder,我会尝试在子选择中限定 SizeOrder,如下所示:WHERE SizeOrder = MIN(Products.SizeOrder) 和 MAX() 相同。
    • 这可悲地产生了相同的“无效使用组函数”错误
    • 糟糕,我的测试中有一个小错字,现在可以完美运行 - 非常感谢!
    【解决方案2】:

    您应该只使用 Size 表中的 SizeOrder 字段进行整个查询,然后将结果与 SizeName 字段的 Size 表连接。

    【讨论】:

      猜你喜欢
      • 2022-11-14
      • 1970-01-01
      • 2021-09-11
      • 1970-01-01
      • 2012-07-25
      • 2015-04-05
      • 2016-08-27
      • 2017-06-10
      • 2016-11-08
      相关资源
      最近更新 更多