2014-10-20 28 views
1

我有一個表(交易)列'TransID','StoreName'和'金額'。 有幾個商店列出的金額爲'0'。按行值排序的唯一行的SQL百分比?

TRANSACTIONS 
TransID StoreName   Amount 
1   Able Store    45 
2   Baker Store   23 
3   Charlie Store   9 
4   Baker Store   0 
5   Charlie Store   0 
6   Charlie Store   0 

我需要生成一個查詢來告訴我,爲每個不同的STORENAME, 什麼是< $ 0.01>的百分比爲每個存儲與輸出這$ 0.01。

在上表中,其結果應該是這樣的:

Able Store  100% 
Baker Store  50% 
Charlie Store 33% 

我已經試過COUNT,GROUP BY但我無法弄清楚如何做到這一點?或者如果它甚至有可能...或者,也許我只是不那麼尖銳...

任何建議都非常歡迎。我還有幾根頭髮要拔出....

如果我想按月輸出結果怎麼辦? STORE MONTH1 MONTH2 MONTH3 ... 能夠存儲100%50% 貝克商店50%0% 查理商店33%75%

+0

AVG是一個標準的(總)組可能適合你的問題的功能 – umlcat 2014-10-20 20:47:47

回答

3

此查詢工作正常與不負量值。

如果有可能是負的金額,你想找到的陽性率,使用此查詢:

select storename, round(avg(case when amount > 0 then 1 else 0 end) * 100, 2) 
    from transactions group by storename; 

如果有可能是負的金額和你想找到的正&百分比&負,使用此查詢:

select storename, round(avg(abs(sign(amount))) * 100, 2) 
    from transactions group by storename; 
+0

非常精確。謝謝 – 2014-10-20 20:02:37

+0

好的解決方案,即使它是濫用SIGN功能。負值(我知道它沒有意義)會扭曲結果。 (http://dev.mysql.com/doc/refman/5.0/en/mathematical-functions.html#function_sign) – agim 2014-10-20 20:14:20

+0

@agim添加了一些額外的案例,謝謝 – Multisync 2014-10-20 20:45:17

1
select storename, 
     sum(case when amount <> 0 then 1 end) * 100/count(*) as percenate 
from transactions 
group by storename 
+0

所以這會給我一個大於0的金額佔0的百分比? – 2014-10-20 19:53:19

+0

@AaronBirnbaum它給你所有金額不等於零的金額的百分比。 – Barmar 2014-10-20 19:59:05

+0

真棒!對不起,如果這是一個基本的問題... – 2014-10-20 20:01:17