Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建显示SQL中变量百分比的表_Sql_Postgresql - Fatal编程技术网

创建显示SQL中变量百分比的表

创建显示SQL中变量百分比的表,sql,postgresql,Sql,Postgresql,我正在使用一个用户数据表,其中包括用户的状态和唯一ID: 空白表 状态 用户id 科罗拉多州 1. 佛罗里达州 2. 科罗拉多州 3. 犹他州 4. 纽约 5. 缅因州 6. 您可以执行以下操作来计算百分比: SELECT state, round(count(*)::decimal / (select count(*) from t) * 100, 2) AS per FROM t GROUP BY state; 要转换de table,可以使用crosstab()函数,但我认为这个静态透

我正在使用一个用户数据表,其中包括用户的状态和唯一ID:

空白表 状态 用户id 科罗拉多州 1. 佛罗里达州 2. 科罗拉多州 3. 犹他州 4. 纽约 5. 缅因州 6.
您可以执行以下操作来计算百分比:

SELECT state, round(count(*)::decimal / (select count(*) from t) * 100, 2) AS per
FROM t 
GROUP BY state;
要转换de table,可以使用crosstab()函数,但我认为这个静态透视在这种情况下不会有用

此查询是一种动态轴心,但我不知道是否对您有用:

SELECT array_agg(state || ': ' || per || ' %') AS data
FROM (
   SELECT state, round(count(*)::decimal / (select count(*) from t) * 100, 2) AS per
   FROM t 
   GROUP BY state) AS aux;
输出(使用我的示例数据):

资料 {“纽约:25.00”,“科罗拉多:25.00”,“佛罗里达:50.00”}
我建议有条件地汇总:

select avg( (state = 'Colorado')::int ) as ratio_co,
       avg( (state = 'Florida')::int ) as ratio_fl,
       avg( (state not in ('Colorado', 'Florida'))::int ) as ratio_other
from mytable;

这将产生一个介于0和1之间的数字。如果您愿意,您可以乘以100并格式化结果。

这太完美了,谢谢!不熟悉条件聚合,但这实际上很有意义。做了一点格式化,并且能够得到我想要的,再次感谢。你能在你的查询中添加一个不同的吗?像
selectdistinct*from(你的查询)q