MySQL数据库中最小长度的返回字符串

MySQL数据库中最小长度的返回字符串,mysql,string,Mysql,String,我有一个名为Inventory的表,其中包含字段Item varchar,Amount int,Type varchar 我要提取的是具有以下字段的行: 所有类型项目的项目字段中的最短条目 类型的所有项目的所有金额总和 我有以下资料: SELECT Item, sum( Amount ) FROM Inventory GROUP BY Type 它给出了我想要的,除了它不返回最短的项目,而是它有一个其他项目,我想最后一个找到。我所说的最短是指最小字符串长度 感谢您的帮助。按类型从库存组中选择类

我有一个名为Inventory的表,其中包含字段Item varchar,Amount int,Type varchar

我要提取的是具有以下字段的行:

所有类型项目的项目字段中的最短条目

类型的所有项目的所有金额总和

我有以下资料:

SELECT Item, sum( Amount ) FROM Inventory GROUP BY Type
它给出了我想要的,除了它不返回最短的项目,而是它有一个其他项目,我想最后一个找到。我所说的最短是指最小字符串长度

感谢您的帮助。

按类型从库存组中选择类型、金额、最小长度项目


应该做你想做的事

你可以通过子查询得到它

select type, sum(amount), item 
from inventory 
group by type
having length(item) <= (select min(length(item)) from inventory)
按列名称ASC/DESC排序的用户订单
限制为1,以从中获得一个

不确定这应该放在哪里,因此我创建了一个新的答案:

select e.type, min_item.s, e.item from inventory e 
  inner join 
    (select e2.type, sum(e2.amount) as s, e2.item, min(length(e2.item)) as bb 
     from inventory e2 group by e2.type) min_item 
  on (length(e.item)=min_item.bb) 
group by e.type;

我对此进行了测试,效果良好。

在MySQL中,选择不在GROUP BY列表中的列的行为是未定义的。MySQL可以为该列返回任何匹配行的值。一个包含测试数据和预期输出的更具体的问题将非常有帮助。不,我已经想到了。该查询返回最小长度项目字符串的长度,而不是项目字符串本身。啊,对不起。给这个镜头选择e.type,max_b.s,e.item from inventory e internal join选择e2.type,sume2.amount as s,e2.item,minlengthe2.item as bb from inventory e2 group by e2.type max_b on lengthe.item=max_b.bb group by e.type;我的答案在上面的评论中。这是正确的位置,还是我应该创建一个新的答案并将其放在那里?需要注意的是,如果多个项目具有相同的最短长度,那么将返回相同长度的项目中的哪一个是未定义的。我认为总和不会给出此处的预期值。总长度仅为与最小长度完全相同的所有项目。Girish Rao下面的最新答案也会给出正确的总数。你应该编辑第一个答案。尝试删除您的第一个答案,因为该答案不正确。否则你会因此而得票。这是这个问题的正确答案。