avg和count可以在sql中一起工作吗?

Posted

技术标签:

【中文标题】avg和count可以在sql中一起工作吗?【英文标题】:can avg and count work together in sql? 【发布时间】:2013-12-04 10:06:53 【问题描述】:

我的数据库中有两个表,它们看起来像这样

create table restaurants(
restID number(8) NOT NULL,(PK)
name varchar(50),
photo varchar(50))

create table review_Restaurants(
commentID number(8) NOT NULL,
reviewDate timestamp,
commentValue varchar(100),
rating number(1),
userName varchar (25) not null,
restID number(8) not null,);

我想做的是从数据库中获取最好的餐厅(更高的评分和评论)图像并将其显示在屏幕上。

我解决这个问题的方法是,我将计算每一个大于 3 的休息的平均评分,以及那些 cmets 超过 5 的人。

select ((avg)rating > 3) as "rating",(count(reviews) > 5) as "review"
from review_restaurant
group by restID;

但它不起作用。我做错了什么?

【问题讨论】:

条件应在 HAVING 子句中处理 【参考方案1】:
SELECT restID
     , Avg(rating) As "rating"
     , Count(reviews) As "review"
FROM   review_restaurant
GROUP
    BY restID
HAVING Avg(rating) > 3
AND    Count(reviews) > 5

如果您从上述语句中删除 HAVING 子句,它将返回所有餐厅评论及其平均评分和评论数量。

HAVING 子句与WHERE 子句非常相似,但细微的区别在于HAVING 子句聚合发生后应用。

另一种方法是使用子查询

SELECT restID
     , rating
     , review
FROM   (
        SELECT restID
             , Avg(rating) As "rating"
             , Count(reviews) As "review"
        FROM   review_restaurant
        GROUP
            BY restID
       ) As a_subquery
WHERE  rating > 3
AND    reviews > 5

这里也适用与使用 HAVING 子句相同的逻辑...我们计算所有平均评分和评论数量,然后我们应用我们的标准。


如果您想从restaurants 表中检索相应的信息,那么一旦我们需要在子查询之上进行查询并将其连接回restaurants 表。

SELECT restaurants.restID
     , restaurants.name
     , restaurants.photo
     , top_restaurants.rating As average_rating
     , top_restaurants.review As number_of_reviews
FROM   restaurants
 INNER
  JOIN (
        SELECT restID
             , Avg(rating) As "rating"
             , Count(reviews) As "review"
        FROM   review_restaurant
        GROUP
            BY restID
        HAVING Avg(rating) > 3
        AND    Count(reviews) > 5
       ) As top_restaurants
    ON top_restaurants.restID = restaurants.restID

【讨论】:

这不是和我的一样吗?不过我会试试看的!你能告诉我如何获取图片吗,因为这个查询只给了我restid 嗯,它似乎有不同的字母和单词以不同的顺序......例如 HAVING 子句。

以上是关于avg和count可以在sql中一起工作吗?的主要内容,如果未能解决你的问题,请参考以下文章

sql中cast()是聚合函数吗

sql中,group by除了和count()配合,还能有其他用法吗?

SQL 使用聚集函数时如何将null的列一起计算

SQL 将 COUNT 和 AVG 查询与 SELECT 结合起来

SQL——聚集函数

SQL sum和count的连接关系