SQL值占行值的百分比?

时间:2014-10-20 19:41:51

标签: sql distinct-values

我有一个表(交易),其列有'TransID','StoreName'和'Amount'。 列出的商店数量为“0”。

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但是我无法弄清楚如何做到这一点......或者如果它甚至可能......或者我可能不是那么尖锐......

非常欢迎任何建议。我还有一些毛发可以拔出来......

如果我想每月输出结果怎么办?        商店MONTH1 MONTH2 MONTH3 ......     能够存储100%50%     贝克商店50%0%     查理商店33%75%

2 个答案:

答案 0 :(得分:3)

此查询可以正常工作,而不是负数值。

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

如果可能存在负数且您想要找到正数百分比,请使用此查询:

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;

答案 1 :(得分:1)

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