MySQL:MIN()和MAX()对应字符串值

MySQL:MIN()和MAX()对应字符串值,sql,mysql,Sql,Mysql,我有一个SQL SELECT语句连接两个表。 主表包含产品的杂项信息,并与第二个尺寸表连接。 第二个表包含存储为字符串的非数字大小列表,其结构如下所示 SizeID=主键 SizeName=大小的字符串值(即小、中、大) SizeOrder=对大小顺序进行排序的整数值(即,SizeOrder为5表示大小大于SizeOrder为2) 我需要SELECT语句从大小表中返回最小()和最大()大小。 但是,由于实际大小存储为字符串,我需要对SizeOrder列运行MIN()和MAX()函数,但返回Siz

我有一个SQL SELECT语句连接两个表。
主表包含产品的杂项信息,并与第二个尺寸表连接。
第二个表包含存储为字符串的非数字大小列表,其结构如下所示

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

我需要SELECT语句从大小表中返回最小()和最大()大小。
但是,由于实际大小存储为字符串,我需要对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;

这将返回错误“Reference'MinSizeID'not supported(Reference to group function)”

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中的列。

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

我想正如您所料,您的建议返回了一个错误,说明“无效使用组函数”这与我所期望的不完全一样。这可能是因为我们感兴趣的最小值(SizeOrder)不是SizeOrder,我会尝试在子选择中限定SizeOrder,如下所示:其中SizeOrder=MIN(Products.SizeOrder)和MAX()相同。不幸的是,这会生成相同的“无效使用组函数”“错误啊,我测试中的小错误,现在效果很好-非常感谢!