qq_38252455 2017-05-14 16:58 采纳率: 0%
浏览 1749

关于查询一个商品分类brand里面price价格最高的两个商品,有点不懂

drop table if exists goods;
create table goods(
id int unsigned primary key auto_increment,
brand char(16),
goodsName char(16),
channel char(8),
price decimal(10,2),
inventory smallint unsigned
);
insert into goods values(default,'huawei','mate','3G',2300,30);
insert into goods values(default,'apple','6plus','4G',4500,43);
insert into goods values(default,'apple','6splus','4G',5100,20);
insert into goods values(default,'samsung','galaxy6','4G',3800,28);
insert into goods values(default,'huawei','mate10','3G',3200,15);
insert into goods values(default,'apple','5c','3G',1800,38);
insert into goods values(default,'huawei','mate8','4G',3500,51);
insert into goods values(default,'huawei','p8Max','4G',2700,27);
insert into goods values(default,'apple','5s','3G',2800,38);
insert into goods values(default,'samsung','galaxy5','3G',3400,33);

我百度到一个答案,但是我看不懂他的子查询
select a.* from goods a where 2>(select count(*) from goods where brand=a.brand and price>a.price)order by a.brand,a.price;






  • 写回答

2条回答 默认 最新

  • KiterCher 2017-05-15 02:25
    关注

    你看不懂的应该是里面 where条件为什么是 price>a.price 吧? 其实这个整条SQL 给你解释一下,应该更好理解一点, 查询a表,然后where条件就是
    后面子查询的count条数需要大于2 ,子查询里面查询了goods表,where条件是分类和a表相同 还需要 goods表的price>a表的price,其实这里是相当于做一个简单排除
    排除掉价格最低的一个商品,例如:分类apple有四件商品,根据这个条件就可以排除掉价格最低的5c ,最后得到的条数是3,也大于了2 然后整个SQL就得到了排序后的三条
    数据信息

    评论

报告相同问题?

悬赏问题

  • ¥15 游戏封号机制,解答一下疑惑
  • ¥15 portainer 本地项目搭建
  • ¥15 Wps js宏根据条件删除指定行
  • ¥15 wireshark里如何将加密的ssh数据包解密
  • ¥15 knn中predict_proba的结果不准的问题
  • ¥15 AT89C51单片机代做
  • ¥50 对于阴影比较重的图片如何matchTemplate?
  • ¥30 docker构建zabbix镜像
  • ¥15 有人帮我看看这个程序哪里出错了吗,大学生结课要求,能给一些指导就更好了🥺🥺(语言-c++)
  • ¥200 模拟电子桌面游戏的请求的参数问题