Sql通过

时间:2016-09-25 14:51:50

标签: sql oracle

我对SQL非常陌生,我已经在这个问题上工作了好几个小时,而且我已经离这么近了,但不是很完整:

三张桌子

分类

CID cname

产品

pid
cid
pname
brand
price 

查看

rid
userid
pid
rdate
score rcomment

我正在尝试

  • 返回产品名称和平均分数。

  • 在电视类别下返回产品名称,平均评分高于4.0

1:

select avg(score), review.pid
from review
join product
on review.pid = product.pid
group by review.pid;

2:

select * from product
join review
on product.pid = review.pid
where cid ='1';

这是一个小提琴: http://sqlfiddle.com/#!4/a6b30/1

2 个答案:

答案 0 :(得分:1)

  1. 您可以将pname添加到GROUP BY子句,然后添加到SELECT子句中。 pid对于每个产品都是唯一的,因此它根本不会影响查询,但您可以将名称添加到结果中。

    select avg(review.score), product.pname
    from review
    join product
    on review.pid = product.pid
    group by product.pname;
    
  2. 在以下查询中,我使用子查询仅使用HAVING子句选择平均得分> gt = 4的项目。然后,我只选择子查询结果中显示的pid并添加cid='1'部分。

    select product.pname
    from product
    join review
    on product.pid = review.pid
    where cid ='1'
    and pid IN (SELECT pid FROM review GROUP BY pid HAVING AVG(score) >= 4);
    

答案 1 :(得分:0)

1

select  p.pname, avg(r.score) 
from review r
join product p
on p.pid = r.pid
group by p.pname;

2。  以下查询返回类别TV下的ids和产品名称,平均得分高于4.0

   select  p.pname,  avg(r.score)
    from 
        category c
    join product p on p.cid = c.cid 
    join review r  on r.pid = p.pid
    where c.cname = 'TV'
    group by 
      p.pname
    having  avg(r.score) > 4 ;