返回SQL查询中的唯一项

时间:2014-02-14 10:34:22

标签: mysql sql database

SELECT Product.name, Product.price 
FROM Purchased, Product 
WHERE Purchased.date1 > '2013-11-02' 
ORDER BY price DESC group by Product.name

您好我正在编写一个查询,以返回自11月2日以来购买零售商网站的独特产品列表,其中首先退回最贵的产品。

有谁能告诉我我的语法有什么问题?

5 个答案:

答案 0 :(得分:3)

您正在使用MySQL的扩展程序组错误。虽然MySQL允许您将选项列表中的项目放在组中,但不是聚合,但它不是确定性的,ORDER BY也无法帮​​助实现这一点。

MySQL documents州:

  

服务器可以自由选择每个组中的任何值,因此除非它们相同,否则所选的值是不确定的。此外,添加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;