SQL查询语句中一列中的某一项的最大值怎么写?

查询“干果和坚果”这一类别的产品中最贵的产品记录,应该怎么写这句查询语句啊我写的是
select * from产品 where价格=(select max(价格) from 产品group by 类别having类别='干果和坚果' )
为什么查询结果出现了别的类别?求解释。

select max(ä»·æ ¼) from 产品group by 类别having类别='干果和坚果'  --这个代表坚果和干果里最贵的价钱

 

但你这样以后

select * from产品 where价格=(select max(价格) from 产品group by 类别having类别='干果和坚果' )

就是所有产品里的价格为40块钱的,所以你还要加一个限制条件

 

select * from äº§å“ whereä»·æ ¼=(select max(ä»·æ ¼) from äº§å“group by ç±»åˆ« having类别='干果和坚果' ) and ç±»åˆ«='干果和坚果'追问

前面不是已经要求了类别了吗怎么还是所有产品的最贵产品呢,这个地方不懂啊。。

追答

恩,这样给你看
select max(价格) from 产品group by 类别 having类别='干果和坚果' --这句的运行结果是40

所以你上边的语句可以改成

select * from 产品 where 价格=40

这样没错吧,但是这样你就没选到分类

所以我那种写法就是

select * from 产品 where 价格=40 and 类别='干果和坚果'

这样你懂了吗?

追问

我的意思是前面已经有having语句了为什么不是直接显示特定的“干果和坚果”呢

追答

因为你那个having在子查询里,对外边的查询类别='干果和坚果' 不生效啊

追问

嗷嗷知道了,可是为什么去掉也不行呢

追答

在子查询去掉的话,你把
select max(价格) from 产品group by 类别
这句单独运行下,它会显示每个类别的最高价格,而你外边用的等于号,肯定会报错,子查询返回多个行什么的

如果等号改成in的话,可以执行通过,但是返回的所有物品中,价格在这些当中的所有记录,你理解一下这几句话的意思

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-11-07
写的好复杂!既然条件明确,用:
SELECT TOP 1 * FROM 产品 WHERE (类别 = '干果和坚果') ORDER BY 价格 DESC
岂不是更简单?
相似回答