Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.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_Sql Server 2012 - Fatal编程技术网

Sql 列中出现的百分比

Sql 列中出现的百分比,sql,sql-server-2012,Sql,Sql Server 2012,看了看,但只发现投票结果不好的问题,没有好的答案 我正在尝试查找SQL Server中发生的事件的百分比。我正在做的事情的简化版本: ID NAME FAVORITE_COLOR ------------------------------------ 1 Jim Blue 2 Tom Green 3 Rob Yellow 4 Kev Blue 5 Kim Gree

看了看,但只发现投票结果不好的问题,没有好的答案

我正在尝试查找SQL Server中发生的事件的百分比。我正在做的事情的简化版本:

 ID    NAME   FAVORITE_COLOR
------------------------------------
  1    Jim        Blue
  2    Tom        Green
  3    Rob        Yellow
  4    Kev        Blue
  5    Kim        Green
  6    Bev        Blue
我能数一数每个人有多少,这很简单

SELECT 
    favorite_color, COUNT(favorite_color) AS totals 
FROM 
    color_prefs 
GROUP BY 
    favorite_color
这会告诉我3个人喜欢蓝色(等等)。我不知道该怎么做的是得到百分比。我想知道50%的人喜欢蓝色。我尝试了以下方法,但SQL完全不喜欢:

SELECT 
    favorite_color, 
    COUNT(favorite_color) / SUM(COUNT(favorite_color)) AS color_percent 
FROM 
    color_prefs 
GROUP BY 
    favorite_color
我得到一个错误:

无法对包含聚合或子查询的表达式执行聚合函数

显然,我可以让PHP帮我解决这个问题,但我认为在SQL中必须有一种无子查询的方法,对吗?

使用窗口函数:

Select color, count(*),
       Count(*) * 1.0 / sum(count(*)) over ()
From color_prefs
Group by color;
使用窗口功能:

Select color, count(*),
       Count(*) * 1.0 / sum(count(*)) over ()
From color_prefs
Group by color;

有两种方法可以做到这一点。第一种方法效率不高,但如果您的表中没有太多行,则应该可以

select favorite_color,count(favorite_color)*100/(select count(*) from a)
from color_prefs
group by favorite_color
这是第二种方法,效率更高

select favorite_color,count(favorite_color)*100/sum(count(*)) over()
from color_prefs
group by favorite_color

检查

您可以用两种方法来完成。第一种方法效率不高,但如果您的表中没有太多行,则应该可以

select favorite_color,count(favorite_color)*100/(select count(*) from a)
from color_prefs
group by favorite_color
这是第二种方法,效率更高

select favorite_color,count(favorite_color)*100/sum(count(*)) over()
from color_prefs
group by favorite_color

检查

是否希望查询不包含子查询?最后我不在乎,但最好不包含子查询。真正的查询要复杂一点,因为我要连接两个表并限制在一个日期范围内。。。但这对我来说太具体了,它永远也帮不了其他任何人解决同样的问题。所以你想要一个没有子查询的查询吗?最后我不在乎,但最好没有子查询。真正的查询要复杂一点,因为我要连接两个表并限制在一个日期范围内。。。但这对我来说太特殊了,它永远不会帮助其他人解决同样的问题。就是这样。但它为什么/如何做到这一点?我想我想知道的是,我应该去哪里寻找更多关于我做错了什么或这做对了什么的信息。可以从over()开始?一个好的开始是关于主题的文档或文章:。就是这样。但它为什么/如何做到这一点?我想我想知道的是,我应该去哪里寻找更多关于我做错了什么或这做对了什么的信息。可以从over()开始?一个好的开始是关于主题的文档或文章:。给出这个问题的答案,因为它更完整一些。看起来我确实需要学习over()来理解它是如何工作的。谢谢回答这个问题是因为它更完整一点。看起来我确实需要学习over()来理解它是如何工作的。谢谢