在sql中分组常见结果

时间:2010-07-07 08:14:45

标签: sql mysql

我有一个产品表,其中包含varchar,varchar和decimal类型的产品,类别和成本字段。

然后我有一个销售表,其字段为客户端,产品名称,数量,成本和saledate,类型为varchar,varchar,int,decimal和date。

我想展示一个月内销售的所有产品,比如当月。

但是,我不想单独展示每一笔销售。我想自动将所有产品一起添加并将其显示为一行。

在销售表中,每个销售记录的成本已经乘以数量。

因此,例如,如果购买了5瓶啤酒,它将返回一行,显示名称为啤酒,数量为5,成本为多。

我需要说的话:

Select product, cost from sales, WHERE sales.product=products.name 
AND category='food' AND WHERE month(date_field) = month(getdate())

这应显示当月特定类别产品的所有销售额,但有一种简单的方法可以将产品“分组”在一起吗?

我必须考虑销售表中的数量字段,因为一次销售不一定只是一种产品

一个希望更清晰的例子,一个销售记录可能是一个客户的2个啤酒,成本为10,另一个销售记录可能是另一个客户,数量为3,成本为15.我只想要一条记录对于啤酒来说,5个被售出,总成本是25。

我不知道从哪里开始......

4 个答案:

答案 0 :(得分:1)

您正在寻找类似

的内容
Select product, cost from sales,products WHERE sales.product=products.name 
AND category='food' AND month(date_field) = month(getdate())

根据产品表中的类别获取您建议链接的项目列表。

要按类别获取摘要,您需要以下内容:

Select category,SUM(Sales.Quantity),SUM(Sales.cost) from 
sales,products WHERE sales.product=products.name 
AND category='food' AND month(date_field) = month(getdate()) group by category

这样可行,但在您的数据库结构中有很多批评,特别是按名称链接产品并不是很可靠。

答案 1 :(得分:0)

这个问题看起来非常熟悉......

答案是SQL GROUP BY语句。

SELECT product, SUM(quantity) FROM sales s, products p WHERE product=p.name AND category='food' AND month(date_field)=month(getdate()) GROUP BY product

上面的SUM(数量)将计算出给定月份内特定产品的所有销售单位。

答案 2 :(得分:0)

使用GROUP BYCOUNT

答案 3 :(得分:0)

SELECT productname, cost, COUNT(*) AS cnt
FROM sales LEFT JOIN products ON sales.product = products.productname 
WHERE category='food' AND month(date_field) = month(getdate())
GROUP BY productname