gpt4 book ai didi

mysql - 在 SQL 查询中返回唯一项

转载 作者:搜寻专家 更新时间:2023-10-30 21:59:34 28 4
gpt4 key购买 nike

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

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

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

最佳答案

您错误地使用了 MySQL 的分组扩展。尽管 MySQL 允许您将不在分组依据或聚合中的项目放入选择列表中,但它不是确定性的,ORDER BY 对此无济于事。

MySQL documents状态:

The server is free to choose any value from each group, so unless they are the same, the values chosen are indeterminate. Furthermore, the selection of values from each group cannot be influenced by adding an ORDER BY clause.

所以即使你的数据是这样的:

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

您真正要说的是“给我每个产品一个价格(任何价格),然后按价格对最终结果进行排序”。因此,您可以像产品 A 的价格一样轻松获得 2.50。我认为您可以通过使用 ``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;

注意我不得不猜测 Product 和 Purchased 之间的关系

关于mysql - 在 SQL 查询中返回唯一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21776961/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com