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中,group by除了和count()配合,还能有其他用法吗?