SELECT Product.name, Product.price
FROM Purchased, Product
WHERE Purchased.date1 > '2013-11-02'
ORDER BY price DESC group by Product.name
您好我正在编写一个查询,以返回自11月2日以来购买零售商网站的独特产品列表,其中首先退回最贵的产品。
有谁能告诉我我的语法有什么问题?
答案 0 :(得分:3)
您正在使用MySQL的扩展程序组错误。虽然MySQL允许您将选项列表中的项目放在组中,但不是聚合,但它不是确定性的,ORDER BY也无法帮助实现这一点。
服务器可以自由选择每个组中的任何值,因此除非它们相同,否则所选的值是不确定的。此外,添加ORDER BY子句不会影响每个组中值的选择。
即使您的数据如下:
ProductName | Price
------------+----------
A | 2.50
A | 3.50
B | 9.99
不保证使用GROUP BY Product.Name ORDER BY Price DESC
可以返回每种产品的最高价格。即。
ProductName | Price
------------+----------
A | 3.50
B | 9.99
你真正说的是“每件产品给我一个价格(任何价格),然后按价格订购最终结果”。因此,您可以轻松获得2.50作为产品A的价格。我认为您可以使用`MAX
获得所需的结果:
SELECT product.name,
Max(product.price) AS Price
FROM purchased,
product
WHERE purchased.date1 > '2013-11-02'
GROUP BY product.name
ORDER BY price DESC;
我怀疑你也错过了产品和购买之间的关系,如果you used the newer ANSI 92 explicit join syntax,你使用的隐式连接语法已经过时了20年,这将被避免:
所以你的最终查询将是:
SELECT product.name,
Max(product.price) AS Price
FROM purchased
INNER JOIN product
ON product.id = purchased.productid
WHERE purchased.date1 > '2013-11-02'
GROUP BY product.name
ORDER BY price DESC;
N.B。我不得不猜测产品和购买者之间的关系
答案 1 :(得分:1)
SELECT
p.name AS Name,
MAX(p.price) AS Price
FROM Purchased AS pr
INNER JOIN Product AS p
ON pr.ProductId=p.ProductId
WHERE pr.date1 > '2013-11-02'
GROUP BY p.name
ORDER BY p.price DESC
我认为您的表,Purchased和Product都有productId列。这样,一个表的每个记录将与另一个表的另一个记录相关联。如果这不是此列的名称,请将ProductId更改为相应的名称。
答案 2 :(得分:0)
请你试试这个:
SELECT Product.name, Product.price
FROM Purchased, Product
WHERE Purchased.date1 > '2013-11-02'
ORDER BY price DESC GROUP BY Product.name,Prodcut.price
使用GROUP BY时,必须包含要在选定类中检索的所有列。
希望这有帮助。
答案 3 :(得分:0)
您需要做的第一件事是找出表格如何相互关联。我假设您在购买的表格中有一个productid列。
SELECT Product.name, Product.price
FROM Purchased, Product
where Purchased.productid = product.id
and Purchased.date1 > '2013-11-02'
ORDER BY price DESC
我们在这里做的是通过它们共有的id列连接两个表。通过这样做,数据库知道哪些数据链接在一起。
假设我们有
购买表
PurchaseDate , Productid,
2013-11-02 1
2013-11-03 2
产品表
id , Product name
1 Fuzzy Bunny
2 Fuzzy bear
现在,如果您查看该数据,您就知道在2013-11-02购买了模糊兔子。您可以看到这一点,因为您的购买表上的productid链接回产品表上的id。这就是你如何在SQL中使用Joins的方法。
答案 4 :(得分:0)
参考您之前的问题。 SQL Structure help and query 这是sqlfiddle
在查询中,
group by
应该在order by
子句之前。
SELECT product.name,
product.price
FROM purchased,
product
WHERE purchased.date1 > '2013-11-02'
GROUP BY product.name
ORDER BY price DESC;