SELECT b1.* FROM book b1
INNER JOIN (SELECT press, AVG(price) AS avg_price FROM book GROUP BY press) b2
ON b1.press = b2.press
WHERE b1.price > b2.avg_price;
select * from book where price > (select max(ap) from (select press,avg(price) ap from book group by press) a)
不知道你这个问题是否已经解决, 如果还没有解决的话:我可以给出如下解决方案:
SELECT bid, bkind, bname, press, price
FROM table_name
WHERE press IN
(SELECT press FROM table_name
GROUP BY press
HAVING AVG(price) <
(SELECT AVG(price) FROM table_name)
);
解释一下上面的SQL语句:
首先在外层查询中选择所有需要的字段,包括图书编号(bid),图书类别(bkind),图书名称(bname),出版社(press),价格(price)。
使用子查询语句在内层查询中获取平均价格,这可以通过使用聚合函数AVG(price)来实现。
然后在内层查询中使用GROUP BY子句按照出版社(press)进行分组,并使用HAVING子句过滤出价格高于平均价格的出版社。
最后外层查询中使用IN子句选择内层查询返回的出版社,从而选择所有出版社的图书价格高于平均价格的图书信息。
这个解决方案中没有涉及到调优问题,因为通过合理的查询语句可以最小化查询的效率和资源消耗,而不需要额外调优。