内连接两个表来订购第二个表

时间:2014-06-16 03:37:58

标签: sql inner-join

我有两张桌子,第一张为客户保留评级: CustIdPoint(一位客户可能有多个积分) 第二个保存有关客户的信息。 我想订购前十名客户,所以我必须对每个客户进行平均评级,然后从第二个表中显示前十名客户。 我尝试使用加入表格,但我不能。 你能告诉我最简单的方法吗?

样本数据: tb_rating:

Cust_Id Rating  
1        3  
1        5  
2        3  
1        3  
2        1  

tb_Customers:

Cust_Id Cust_Name  
1        aaaa  
2        bbbb

2 个答案:

答案 0 :(得分:0)

在这种情况下使用内部联接或where子句的直接方法没有太大区别:

select a.cust_ID, a.Cust_Name, b.Rating
from  Customer a,  
    (
    select top 10 cust_ID, avg(Rating) as Point from rating 
    group by cust_ID order by avg(Rating) desc 
    ) b where a.cust_ID = b.cust_ID 
order by a.cust_name 

答案 1 :(得分:0)

select tb_customers.cust_id, tb_customers.cust_name, avg(rating) as average
from tb_customers join tb_rating on tb_customers.cust_id = tb_rating.cust_id
group by tb_customers.cust_id, tb_customers.cust_name
order by average desc;

您还没有说过您正在使用哪个DBMS,以及如何获得结果中的前十行取决于此。如果是SQL Server,只需在“select”之后添加“top 10”。如果是MySQL,请在查询结尾添加“limit 0,10”。其他系统可能需要其他表达方式。

还有一个细节:如果列“rating”的类型为整数,你可以(再次依赖于你使用的系统)如果你想要用“avg(1.0 * rating)”替换“avg(rating)”平均值中的小数。

要编写这样的查询,通常最容易一步一步地思考,并尝试每一步。首先,加入两个表,以便在一个大表中获得所需的所有数据:

select *
from tb_customers join tb_rating on tb_customers.cust_id = tb_rating.cust_id;

尝试使用您的数据运行它,以便您看到结果是您所期望的。然后,使用“avg”和“group by”计算每个客户的平均值:

select tb_customers.cust_id, tb_customers.cust_name, avg(rating) as average
from tb_customers join tb_rating on tb_customers.cust_id = tb_rating.cust_id
group by tb_customers.cust_id, tb_customers.cust_name;

也运行它。然后添加如上所示的“order by”,最后添加如何获取前十行。