我在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中执行此操作。
答案 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 |
答案 1 :(得分:0)
Count()是聚合函数,你的表中有3个苹果。要只获得一个您需要按ID分区数据 - 唯一ID中只有1个苹果。您可能应该使用分析函数来执行此操作,因为我不清楚您在问什么。如果您在第一个查询中按ID分组,则输出中也应为1:
SELECT count(Quantity) AS ItemQ from item group by id;