如何进行此查询:'查找哪种类型的销售额超过其他类型?'

时间:2018-05-18 14:31:35

标签: sql postgresql

我有如下表格:

产品

-productId (primarykey)

-productCategory (foreignkey)

productCategories

-productCategoryId (pk)

-productCategoryName

soldProducts

-soldProductId (pk)

-productId (fk)

我试图查询哪个类别的产品销售比其他产品更多。

在soldProducts表中,例如,如果“soldProducts”上的“x”产品四次,则表示“x”产品已售出4次。

根据这些,我该如何进行此查询?

2 个答案:

答案 0 :(得分:0)

如果您想要一个销售额最高的单个类别,那么这基本上是joingroup 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返回。

我还注意到数据模型非常有限,没有关于购买者,供应商,销售日期,销售量或退货的信息。其中一些可能会影响结果。

答案 1 :(得分:0)

加入你的桌子:

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。