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

时间:2009-08-18 09:08:16

标签: sql mysql

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

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'(对组功能的引用)”

2 个答案:

答案 0 :(得分:3)

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;

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

答案 1 :(得分:1)

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