gpt4 book ai didi

mysql - 得到已售出的热门产品吗?

转载 作者:行者123 更新时间:2023-11-29 17:53:24 25 4
gpt4 key购买 nike

我正在使用子查询来获取 order_products 表中已售出的热门产品。

SELECT 
products.name,
(SELECT count(product_id) FROM order_products WHERE order_products.product_id = products.id) as total FROM products
ORDER BY total DESC LIMIT 10

这个查询似乎工作正常,但我觉得必须有更好的方法而不是使用子查询?

我尝试将GROUP BY order_products.product_idcount()一起使用,但出现聚合sql错误。

最佳答案

将子查询重构为联接,如下所示。

SELECT 
products.name,
COUNT(*) AS count
FROM
products
JOIN
order_products ON order_products.product_id = products.id
GROUP BY
products.name
ORDER BY COUNT(*) DESC
LIMIT 10

这与您所拥有的几乎相同。但它以一种许多 SQL 程序员认为更容易阅读的方式表达了您的意图。而且,许多 MySQL 版本中的查询规划器都可以很好地完成此工作,而子查询版本可能无法做到这一点。

编辑 GROUP BY 中提到的列也应出现在 SELECT 子句中。如果您希望同时显示产品 ID 和产品名称,请使用此类查询。

SELECT 
products.id, products.name,
COUNT(*) AS count
FROM
products
JOIN
order_products ON order_products.product_id = products.id
GROUP BY
products.id, products.name
ORDER BY COUNT(*) DESC
LIMIT 10

您也许可以通过说 SELECT products.nameGROUP BY products.id 来摆脱困境。但要实现这一点,您要么依赖于 MySQL 的已弃用功能,要么依赖于 SQL99 的可选功能。许多程序员喜欢避免这样的事情。阅读本文以获取更多信息。 https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html

关于mysql - 得到已售出的热门产品吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49098650/

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