我有一个名为 Transaction_Body 的简单表
身份证 | 物品ID | 日期X | 商品数量 | 总成本 |
---|---|---|---|---|
1 | 1 | 2023-06-08 | -1 | -500 |
2 | 1 | 2023-06-07 | -2 | -1000 |
3 | 1 | 2023-06-07 | 1 | 400 |
4 | 1 | 2023-06-03 | 2 | 800 |
请注意我有一些价值观< 0
我这里有一个简单的查询
select
SUM(T.totalcost) / SUM(T.ItemAmount) as AVG
FROM Transaction_Body T
Where T.ItemsID = 1 and T.DateX <='2023-06-07'
group by T.ItemsID
这段代码给了我平均值,但我想在这些条件旁边添加一个条件
((如果“物品数量”< 0 in 'DateX' = '2023-06-07' Just ignore it from calculation ))
尝试以下查询:-
SELECT
SUM(CASE WHEN T.ItemAmount < 0 AND T.DateX = '2023-06-07' THEN 0 ELSE T.totalcost END) /
SUM(CASE WHEN T.ItemAmount < 0 AND T.DateX = '2023-06-07' THEN 0 ELSE T.ItemAmount END) AS AVG
FROM Transaction_Body T
WHERE T.ItemsID = 1 AND T.DateX <= '2023-06-07'
GROUP BY T.ItemsID;
试试这个:
SELECT
SUM(T.totalcost) / SUM(T.ItemAmount) as AVG
FROM Transaction_Body T
WHERE T.ItemsID = 1
AND T.DateX <= '2023-06-07'
/* Exclude rows where ItemAmount < 0 on DateX = '2023-06-07' */
AND NOT EXISTS (
SELECT 1
FROM Transaction_Body T2
WHERE T2.ItemsID = T.ItemsID
AND T2.DateX = '2023-06-07'
AND T2.ItemAmount < 0
)
GROUP BY T.ItemsID;
此带有 NOT EXISTS 子句的子查询用于排除“ItemsID”与外部查询的“ItemsID”相同、“DateX”为“2023-06-07”且“ItemAmount”小于 0 的行。如果任何这样的行存在,它将在计算中被忽略