MySQL嵌套选择

时间:2015-11-18 13:08:05

标签: mysql sql database psql

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

问题: 对于同一客户评定相同产品的所有情况 不止一次,并在某个时间点给予它较低的评级 比以前更新客户名称,产品名称, 和给出的最低星级。

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

3 个答案:

答案 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子句。