0

我在 SQL 中有问题。

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

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

但如果我购买相同的商品,我们必须在此处将销售与购买和计数等于 0

所以我们必须结果显示我有 2 个项目,但我使用 group by,我无法计算同一项目的计数。

我的完整查询:

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 中做到这一点。

4

2 回答 2

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

于 2013-02-14T20:04:11.777 回答
0

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

SELECT count(Quantity) AS ItemQ from item group by id;
于 2013-02-14T19:49:07.360 回答