我有两个表,您也可以在 sqlfiddle 找到它们:
CREATE TABLE Sales ( Product_ID VARCHAR(255), Category_ID VARCHAR(255), Sales_Value VARCHAR(255), Sales_Quantity VARCHAR(255) ); INSERT INTO Sales (Product_ID, Category_ID, Sales_Value, Sales_Quantity) VALUES ("P001", "C001", "500", "200"), ("P002", "C001", "600", "100"), ("P003", "C002", "300", "250"), ("P004", "C002", "900", "400"), ("P005", "C002", "800", "600"), ("P006", "C003", "200", "150"), ("P007", "C003", "700", "550"); CREATE TABLE Categories ( Category_ID VARCHAR(255), Category_Name VARCHAR(255) ); INSERT INTO Categories (Category_ID, Category_Name) VALUES ("C001", "Fashion"), ("C002", "Sport"), ("C003", "Shoes");
第一个表包含Sales每个产品的。 第二个表包含Categories。
Sales
Categories
现在,我要显示所有产品以及average_sales_price_per_category每个产品的旁边。 结果应如下所示:
average_sales_price_per_category
Product_ID Category average_sales_price_per_category P001 Fashion 3.66 P002 Fashion 3.66 P003 Sport 1.60 P004 Sport 1.60 P005 Sport 1.60 P006 Shoes 1.28 P007 Shoes 1.28
我尝试使用该问题的解决方案,但我认为该OVER子句在我的MySQL版本中不可用:
OVER
MySQL
SELECT s.Product_ID, c.Category_Name, ((SUM(s.Sales_Value * s.Sales_Quantity) over (partition BY c.Category_ID) / SUM(s.Sales_Value) over (partition BY c.Category_ID)) as average_sales_price FROM Sales s JOIN Categories c ON c.Category_ID = s.Category_ID;
错误:
检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在第4行的’over(partition BY c.Category_ID)/ SUM(s.Sales_Value)over(partition BY c.Cate’)附近使用
我还能使用什么其他SQL来获得预期的结果?
对于 旧 版本,可以使用相关子查询:
SELECT s.Product_ID, c.Category_Name, (SELECT SUM(SS.Sales_Value) / SUM(SS.Sales_Quantity) FROM Sales SS WHERE SS.Category_ID = S.Category_ID ) AS average_sales_price FROM Sales s JOIN Categories c ON c.Category_ID = s.Category_ID;
这是SQL Fiddle。