sql-group by后计算百分比-只显示一行

byqmnocz  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(589)

我在处理sql fiddle with group by子句,并根据临时表“a”的结果查找百分比。
这是小提琴。
http://sqlfiddle.com/#!9/faf2f/6959号
我确实遇到过很多不同的方法来实现这一点,比如使用union all,但我的问题是为什么这个查询只返回一行而不是两行。
列表项
数据:

TotalCost
230
200
100
1254

查询:

SELECT Category, Cnt , Cnt/sum(Cnt)  as percent from (

SELECT 
  Case When TotalCost < 301 Then '0-300'
  Else ' > 300' End as Category,
  count(*) as cnt
  FROM Cars      
  group by Category       

  ) A
;

预期结果:

Category    Cnt   percent
0-300        3     75
> 300        1     25

实际结果:

Category    Cnt  percent
> 300        1    25
xnifntxz

xnifntxz1#

你可以试着按 case when 而不是别名。
其次,您的总计数需要进行所有计数,这样您就可以进行子查询。
像这样。

SELECT Category, Cnt , Cnt/(select count(*) from Cars) * 100  as percent 
from (
  SELECT 
  (Case When TotalCost < 301 Then '0-300'
  Else ' > 300' End) as Category,
  count(*) as cnt
  FROM Cars
  GROUP BY  (Case When TotalCost < 301 Then '0-300'
  Else ' > 300' End)
) A
ORDER BY 3 DESC

或者你可以用 CROSS JOIN 得到总数。

SELECT Category, Cnt , Cnt/v.totle * 100  as percent 
from (
  SELECT 
  (Case When TotalCost < 301 Then '0-300'
  Else ' > 300' End) as Category,
  count(*) as cnt
  FROM Cars
  GROUP BY  (Case When TotalCost < 301 Then '0-300'
  Else ' > 300' End)
) A CROSS JOIN (select count(*) totle from Cars) v

sqlfiddle公司
结果:

| Category | Cnt | percent |
|----------|-----|---------|
|    0-300 |   3 |      75 |
|    > 300 |   1 |      25 |

相关问题