我有两张桌子,第一张为客户保留评级:
CustId
和Point
(一位客户可能有多个积分)
第二个保存有关客户的信息。
我想订购前十名客户,所以我必须对每个客户进行平均评级,然后从第二个表中显示前十名客户。
我尝试使用加入表格,但我不能。
你能告诉我最简单的方法吗?
样本数据: 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
答案 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”,最后添加如何获取前十行。