我想用下面的表格在線想出一個做法頁面上這樣一個問題:MySQL的嵌套選擇
問題: 對於所有案件中,額定同一客戶同一產品 不止一次,並在某些時間點給它比以前更低的評分 ,返回客戶名稱,產品名稱, 和給出的最低星級評分。
我似乎無法弄清楚爲什麼這是不正確的 - 任何人都可以提供幫助嗎?
我想用下面的表格在線想出一個做法頁面上這樣一個問題:MySQL的嵌套選擇
問題: 對於所有案件中,額定同一客戶同一產品 不止一次,並在某些時間點給它比以前更低的評分 ,返回客戶名稱,產品名稱, 和給出的最低星級評分。
我似乎無法弄清楚爲什麼這是不正確的 - 任何人都可以提供幫助嗎?
這裏是我到目前爲止(無樣本數據):
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
太棒了!在第七行,這應該是Rating.cust_id = Customer.cust_id not prod_id – RandomMath
你在哪裏檢查評級應該在未來?你甚至不檢查評級應該不同。 – Adish
很高興這得到你在找什麼。 –
這個查詢將返回已經由同一客戶審查一次以上產品的最低評級星星,與任何較新的收視率比舊的等級較低:
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
只需幾點: 您不能在FROM子句中指定您在SELECT中指定屬性的理智方式。您只能在FROM中使用單個表格,而對於每個使用的聯結,您只能使用一個表格。 SELECT a,b,c FROM a; < ---------- fine SELECT a,b,c FROM a,b; < ----不好 SELECT a,b,c FROM a JOIN b; < ---很好
當談到FROM/JOIN中的表時,你不要使用「AS」給它們一個別名,只是表名和後面的別名。
FROM atable a JOIN btable b; < - 這將別名a分配給「atable」,將b分配給「btable」。
您還必須指定共同屬性,該表是怎麼回事要加入:
客戶JOIN評級customer.cust_id = rating.cust_id;
至於其他方面,您可以在語法關閉後製定正確的WHERE子句。
您需要連接條件(切換到現代顯式連接語法。)還需要GROUP BY。 – jarlh
您可以添加示例數據嗎?我正在爲你做點什麼。 –