目前我正在修改我的sql。我希望在一个项目表中执行查询,我希望得到最便宜的糖果。
select min(cost)
from items
where name like '%sweets%' and seller_id
in (
select seller_id
from items
where name like '%sweets%')
以上结果,返回最便宜的价格。
问题:
我想显示糖果的名称,例如它可能是巧克力糖果或草莓糖果等。但如果我更改查询的第一行以选择名称,min(cost)会产生以下错误:
Column 'items.name' is invalid in the select list because it is not contained
in either an aggregate function or the GROUP BY clause.
现在我正在查看MYSQL教程,但我正在使用sql server。它在教程中运行良好,但不是我的情况
答案 0 :(得分:3)
您需要的是最低成本项目,然后按成本排序并选择第一行。
Select top 1 name, cost
from items
where name like '%sweets%'
order by cost desc
答案 1 :(得分:3)
这应该有用。
select *
from items
where name like '%sweets%' and cost
in (
select min(cost)
from items
where name like '%sweets%')
答案 2 :(得分:3)
您不需要子查询来执行此操作。您只需按价格订购该表:
select top 10 *
from items
where name like '%sweets%'
order by price asc
这将为您提供与%sweets
匹配的10个最便宜的商品。
答案 3 :(得分:2)
这将为您提供最便宜行中的所有字段,而不仅仅是成本:
SELECT *
FROM items
WHERE
name LIKE '%sweets%'
AND cost = (SELECT MIN(cost) FROM items WHERE name LIKE '%sweets%')
BTW,后缀搜索LIKE %something
将导致全表扫描(相应的性能不佳)。
答案 4 :(得分:1)
您看到的错误描述了您需要执行的操作 - 在查询中添加GROUP BY
子句。另外,据我所知,你的子查询是不必要的。
试试这个:
SELECT
i.[name],
MIN(i.[cost])
FROM [items] i
WHERE i.name LIKE '%sweet%'
GROUP BY i.[name]
答案 5 :(得分:0)
在底部添加group by items.name