我有如下表格:
产品
-productId (primarykey)
-productCategory (foreignkey)
产品分类
-productCategoryId (pk)
-productCategoryName
已售出产品
-soldProductId (pk)
-productId (fk)
我正在尝试查询哪个类别的产品比其他产品卖得更多。
例如,在已售产品表中,如果"已售产品"上的"x"产品四次,则表示"x"产品售出 4 次。
根据这些,我该如何进行此查询?
如果你想要一个销量最高的单一类别,那么这基本上是一个join
和group by
:
select p.productCategory, count(*)
from soldProducts sp join
products p
on sp.productId = p.productId
group by p.productCategory
order by count(*) desc
fetch first 1 row only;
这回答了这个问题(正如我的解释),但它留下了一些悬而未决的问题:
- 当存在并列时会发生什么(即,多个类别并列在第一位)? 您不指定要执行的操作。
- 如果你想要类别名称,那么你需要把它
join
回去。
我还注意到,数据模型非常有限,没有关于购买者、供应商、销售日期、销售金额或退货的信息。 其中一些可能会影响结果。
只需加入您的表:
SELECT pc.productCategoryName, COUNT(*) AS Sales
FROM solProducts sp
INNER JOIN products p ON sp.productid = p.productid
INNER JOIN productCategory pc ON p.productCategoryID = pc.productCategoryID
GROUP BY pc.productCategoryName
ORDER BY Sales DESC
我假设产品中的产品类别外键实际上是映射到产品类别表的 id。