计算相同项目的计数

时间:2013-02-14 19:13:22

标签: sql

我在SQL中遇到问题。

现在我有项目表,并且不会计算我销售的商品的数量,如果我一次销售一件商品,我可以这样做:

 SELECT count(Quantity) AS ItemQ from item group by item_name

但如果我购买相同的商品,我们必须在这里以买入和计数等于0

进行销售

所以我们必须结果显示我2项,但我使用分组,我无法计算相同项目的计数。

我的完整查询:

SELECT count(billsItems_Quantity) AS ItemQ , billsItems_ItemDiscount  , billsItems_ItemName , billsItems_Price , billsItems_SecondPrice  , billsItems_ItemTotal ,bills_StoreID , bills_UserID , bills_ID , billsItems_BillItemSerial, cashier_trans_DocId , billsitems_ItemID , billsItems_Barcode
FROM bills , billsitems , cashier_trans 
WHERE 
bills.bills_ID = billsitems.billsItems_BillItemSerial
and bills.bills_ID = cashier_trans.cashier_trans_DocId
and bills.bills_StoreID = '$ausers_StoreId'
and bills.bills_UserID = '$ausers_ID'
and bills.bills_Status = '1'

项目表是

id      item_name   bill_type  count_item   price_item

1        apple      sale         1             20

2        apple      buy          1             15

3        tea        sale         1             10

4       apple       sale         1             20

现在苹果的数量必须向我显示 1 3

我怎样才能在SQL中执行此操作。

2 个答案:

答案 0 :(得分:1)

首先,COUNT给出结果集中的行数。因此,要计算总数量,您需要使用SUM汇总。

现在,要查找项目总数,您可以执行以下操作:

SELECT MIN(id), n.item_name, SUM(qty) AS `qty` FROM
(
SELECT MIN(id) AS id, item_name, SUM(count_item) AS `qty`
  FROM item 
 WHERE bill_type = 'sale'
 GROUP BY item_name
 UNION ALL
SELECT MIN(id) AS id, item_name, -SUM(count_item) AS `qty`
  FROM item 
 WHERE bill_type = 'buy'
 GROUP BY item_name
) n
GROUP BY item_name

产生以下输出:

| ID | ITEM_NAME | QTY |
------------------------
|  1 |     apple |   1 |
|  3 |       tea |   1 |

这是sqlfiddle

答案 1 :(得分:0)

Count()是聚合函数,你的表中有3个苹果。要只获得一个您需要按ID分区数据 - 唯一ID中只有1个苹果。您可能应该使用分析函数来执行此操作,因为我不清楚您在问什么。如果您在第一个查询中按ID分组,则输出中也应为1:

SELECT count(Quantity) AS ItemQ from item group by id;