我试图通过创建一个mysql查询获得最畅销的产品列表。问题是即使我使用计数后它仍然可以获得所有数据。
select
mf.*,
od.*,
count(od.product_id) as product_count
from masterflight mf ,
order_details od
where od.product_id=mf.ProductCode
group by od.product_id
order by product_count
此处masterflight
是产品详细信息与其ID一起存储的表。并且order_details
是存储每个产品的记录的表格。我试图把一个逻辑假设一个id 2
的产品卖了4次,每次它有一个单独的条目然后我会用COUNT
计算那些然后显示它做的那个好像在起作用。
答案 0 :(得分:1)
尝试更整洁的东西:
select
mf.ProductCode,
count(od.*) as product_count
from
order_details od
inner join masterflight mf on
od.product_id = mf.ProductCode
group by
mf.ProductCode
order by product_count desc
问题是你选择了所有的od
,但你没有按它进行分组,所以你只是得到了所有的订单行,这根本没有帮助你。我应该注意到,MySQL是唯一一个允许这种行为的主要RDBMS - 而且它令人困惑且难以调试。我建议不要使用该特定功能。作为一般规则,如果您选择了一个列但没有聚合(例如 - sum
,avg
,min
等),那么您需要它在group by
条款中。