[英]Update group of rows to delete a specific total amount from the sum of the rows SQL
[英]Sum Values From Specific Group of Rows - SQL
我試圖對所有Sales / TXN求和,並計算整個月的唯一ID,而不僅是排名為“ 1”的單個行。 因此,對於客戶“ ABC”,我想要檢索其1月的所有數據,對於客戶“ DEF”,我想要其2月的所有數據。
下面是一個示例表,以及我想要的結果集(格式化的道歉)。
銷售表:
Month|ID |Dte |TXNs|Sales|Rank
Jan |ABC|1-5-17|1 |$15 |1
Jan |ABC|1-8-17|2 |$10 |2
Feb |ABC|2-6-17|1 |$20 |3
Feb |DEF|2-6-17|2 |$10 |1
Mar |DEF|3-5-17|1 |$40 |2
May |DEF|5/2/17|3 |$20 |3
期望的答案:
Month|IDs|TXNs|Sales
Jan |1 |3 |$25
Feb |1 |2 |$10
我認為您在表格中列出的ID是不對的? 您結果的第一行應該是ABC,第二個結果應該是DEF嗎?
無論如何,我認為這應該可行:
select month, ID, sum(TXNs), sum(SALES)
from SALES_TABLE
where
(
ID='ABC'
and MONTH='Jan'
)
or (
ID='DEF'
and MONTH='Feb'
)
group by ID, MONTH
編輯:我錯過了計數部分。 這個怎么樣?
select month, count(ID), sum(TXNs), sum(SALES)
from SALES_TABLE
where rank = 1
group by month
您可以使用group by和in子句
select month, count(ID), sum(TNXs), sum(sales)
from my_table where ( month, ID ) in (
select distinct Month, ID
from my_table
where rank = 1
)
group by month
Count Distinct應該為您提供所需的東西:
SELECT Month, COUNT(DISTINCT ID) AS UniqueIds, COUNT(*) AS Transactions, SUM(Sales) AS TotalSales
FROM t
INNER JOIN (
SELECT Month, ID FROM t WHERE Rank = 1
)firstRank WHERE t.ID = firstRank.ID AND t.Month = firstRank.Month
GROUP BY Month
很難按照您的描述進行操作,但這似乎可以滿足要求:
select Month
,count(*) -- number of IDs
,sum(sumTXN)
,sum(sumSales)
from
(
select Month, ID, sum(TXNs) as sumTXN, sum(Sales) as sumSales
from tab
group by Month, ID
having min(Rank) = 1 -- only those IDs with a Rank = 1 within this month
) as dt
group by Month
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.