mysql如何查询比所属出版社图书平均价格高的图书信息。

img


-- 思考:如何查询比所属出版社图书平均价格高的图书信息。
bid :图书编号
bkind:图书类别
bname:图书名称
press:出版社
price:价格


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)
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    我可以给出如下解决方案:

    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语句:

    1. 首先在外层查询中选择所有需要的字段,包括图书编号(bid),图书类别(bkind),图书名称(bname),出版社(press),价格(price)。

    2. 使用子查询语句在内层查询中获取平均价格,这可以通过使用聚合函数AVG(price)来实现。

    3. 然后在内层查询中使用GROUP BY子句按照出版社(press)进行分组,并使用HAVING子句过滤出价格高于平均价格的出版社。

    4. 最后外层查询中使用IN子句选择内层查询返回的出版社,从而选择所有出版社的图书价格高于平均价格的图书信息。

    这个解决方案中没有涉及到调优问题,因为通过合理的查询语句可以最小化查询的效率和资源消耗,而不需要额外调优。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^