MySQL 嵌套选择

MySQL nested selection

我试图通过下表在在线练习页面上找出这个问题:

问题: 对于同一客户对同一产品进行评级的所有情况 不止一次,并且在某个时间点给了它较低的评级 比以前,return客户名,产品名, 以及给出的最低星级。

我似乎无法弄清楚为什么这不正确 - 有人能帮忙吗?

这是我目前所拥有的(没有样本数据):

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

此查询将 return 已被同一客户多次评论的产品的最低评级星级,其中任何较新的评级都低于较旧的评级:

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

然后您可以将此查询与产品和客户一起加入 table:

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

简单几点: 您不能像在 SELECT 中指定属性那样在 FROM 子句中指定 tables。 FROM 中只能有一个 table,每个 Join 都可以有一个。 SELECT a, b, c 来自 a; <----------很好 SELECT a, b, c 来自 a, b; <----不好 SELECT a, b, c 来自 a JOIN b; <---很好

说到FROM/JOIN中的table,不用"AS"给他们起别名,只是在table后面加上别名.

FROM atable a JOIN btable b; <--这将别名 a 分配给 "atable",将 b 分配给 "btable"。

您还必须指定要加入 table 的公共属性:

客户加入评分开启 customer.cust_id = rating.cust_id;

至于其余部分,一旦掌握了语法,您就可以计算出要使用的正确 WHERE 子句。