2017-08-04 17 views
1

すべてのSales/TXNを合計し、ランクが「1」である個々の行だけでなく、月全体の個別IDを数えようとしています。したがって、顧客 "ABC"については、Janのすべてのデータを取得したいと思います。顧客のDEFについては、2月のすべてのデータが必要です。特定の行グループの合計値 - SQL

以下は、サンプルテーブルです。 (フォーマットのお詫び)。

売上表:

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 
+1

何を試しましたか? SOはコード記述サービスではないため、SUM COUNT CASE-WHEN-THENとGROUP BY句を使用して問合せを作成するのは比較的簡単です。 – krokodilko

答えて

0

あなたは個別

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 
0

私はあなたの表に記載されているIDが正しくないと思いますか?結果の最初の行はABCで、2番目の結果は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 
0

Countはあなたが探しているもの、あなたを取得する必要があります句でとでグループを使用することができます。

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 
0

それはあなたの説明に従うことは困難ですが、この一致するようです:

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 
関連する問題