我试图通过以下表格在线练习页面上找出这个问题:
问题: 对于同一客户评定相同产品的所有情况 不止一次,并在某个时间点给予它较低的评级 比以前更新客户名称,产品名称, 和给出的最低星级。
我似乎无法弄清楚为什么这不正确 - 有人能帮忙吗?
答案 0 :(得分:1)
这是我到目前为止(没有样本数据):
SELECT
Customer.customer_name,
Product.product_name,
MIN(Rating.rating_stars)
FROM Rating
JOIN Product ON Rating.prod_id = Product.prod_id
JOIN Customer ON Rating.cust_id = Customer.prod_id
GROUP BY Customer.customer_name, Product.product_name
HAVING COUNT(Product.prod_id) > 1
答案 1 :(得分:1)
此查询将返回同一客户多次审核过的产品的最低评分星级,其中任何较新的评级均低于旧评级:
SELECT
r1.prod_id,
r1.cust_id,
MIN(r1.rating_star) AS min_rating
FROM
rating r1 INNER JOIN rating r2
ON r1.prod_id=r2.prod_id
AND r1.cust_id=r2.cust_id
AND r1.rating_date>r2.rating_date
AND r1.rating_star<r2.rating_star
GROUP BY
r1.prod_id,
r1.cust_id
然后,您可以将此查询与产品和客户表连接:
SELECT
customer.customer_name,
product.product_name,
m.min_rating
FROM (
SELECT
r1.prod_id,
r1.cust_id,
MIN(r1.rating_star) AS min_rating
FROM
rating r1 INNER JOIN rating r2
ON r1.prod_id=r2.prod_id
AND r1.cust_id=r2.cust_id
AND r1.rating_date>r2.rating_date
AND r1.rating_star<r2.rating_star
GROUP BY
r1.prod_id,
r1.cust_id) m
INNER JOIN customer on m.cust_id = customer.cust_id
INNER JOIN product ON m.product_id = product.product_id
答案 2 :(得分:0)
只需几点: 您无法在SELECT子句中指定表中指定属性的合理方式。您在FROM中只能有一个表,而对于您使用的每个Join,只能有一个表。 选择a,b,c FROM a; &LT; ----------细 选择a,b,c FROM a,b; &lt; ----不好 选择a,b,c FROM JOIN b; &LT; ---细
当谈到FROM / JOIN中的表时,你不要使用&#34; AS&#34;给他们一个别名,只是表名后跟别名。
FROM aable a JOIN btable b; &lt; - 这将别名分配给&#34; atable&#34;和b到&#34; btable&#34;。
您还必须指定表将要连接的公共属性:
客户JOIN评级为customer.cust_id = rating.cust_id;
至于其余部分,你可以在语法失效后找出正确的WHERE子句。