在别名中显示平均价格,高价格和总价格字段

时间:2017-11-28 16:09:51

标签: sql group-by

SELECT tb_publisher.book_name, AVG(tb_book.price) as average, MAX(tb_book.price), SUM(tb_book.price) 
FROM tb_book 
INNER JOIN tb_publisher 
on tb_book.id_publisher = tb_publisher.id_publisher 
WHERE 'average' < 70000 
GROUP BY tb_publisher.publisher_name

我想显示一个数据,其中平均字段小于70000(假设只有1个记录低于该数字),我无法理解为什么它不想显示,而不是显示所有数据。我尝试了所有我认识的事情,所以帮助会很感激。感谢您的关注。

1 个答案:

答案 0 :(得分:0)

大多数数据库允许您引用having子句中的表别名,因此它看起来像:

SELECT p.publisher_name, AVG(b.price) as average, MAX(b.price), SUM(b.price) 
FROM tb_book b INNER JOIN
     tb_publisher p 
     ON b.id_publisher = p.id_publisher 
GROUP BY p.publisher_name
HAVING average < 70000 ;

注意:

  • SELECT中的未聚合列应与GROUP BY中的列匹配。我不确定你是否想要书籍或出版商的信息,但我猜是出版商。
  • 使用表别名。这些使查询更容易编写和阅读。
  • 有些数据库会执行整数运算。如果price是一个整数而您想要小数位,则可能需要AVG(b.price * 1.0)或类似的东西。
  • 并非所有数据库都支持在HAVING子句中使用表别名。
  • 如果您想要非常小心,则会按p.id_publisher汇总,因为两个不同的发布商可能具有相同的名称。