Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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 server 如何编写sql select以获取百分比_Sql Server_Select_Percentage - Fatal编程技术网

Sql server 如何编写sql select以获取百分比

Sql server 如何编写sql select以获取百分比,sql-server,select,percentage,Sql Server,Select,Percentage,我定义了一个包含两列的视图 France Wine France Fromage France Meat France Chips Belgium Bier Belgium Chips Belgium Chocolate 我喜欢棺材和薯条 为了获得最佳国家/地区,选择哪一个 像 您需要每个国家的棺材和芯片数量除以每个国家的总物品数量 棺材和芯片的计数如下: COUNT(CASE WHEN Item IN ('Bier', 'Chips') THEN 1

我定义了一个包含两列的视图

France    Wine 
France    Fromage
France    Meat
France    Chips
Belgium   Bier
Belgium   Chips  
Belgium   Chocolate
我喜欢棺材和薯条 为了获得最佳国家/地区,选择哪一个 像


您需要每个国家的棺材和芯片数量除以每个国家的总物品数量

棺材和芯片的计数如下:

COUNT(CASE WHEN Item IN ('Bier', 'Chips') THEN 1 END)
如果
项目
是Bier或Chips,则
案例
返回
1
,该值被计算在内。如果不是Bier或Chips,
案例
返回一个空值,该值不计算在内

总而言之:

SELECT
  Country,
      COUNT(CASE WHEN Item IN ('Bier', 'Chips') THEN 1 END) /
      CAST(COUNT(*) AS NUMERIC)
    AS BierChipsPercent
FROM myTable
GROUP BY Country
为什么
转换(计数(*)为数字)
?因为如果没有它,SQL Server似乎将两个计数都视为整数,所以当它们被除时,它会截断结果。将其转换为数字会使其正常工作,因此1/4将产生0.25而不是0

上述查询将为您提供:

Belgium 0.6666666666
France  0.25
Belgium 67
France  25
要得到百分比,只需乘以100。要获取整数,请应用ROUND()函数:

SELECT
  Country,
  ROUND(
      COUNT(CASE WHEN Item IN ('Bier', 'Chips') THEN 1 END) /
      CAST(COUNT(*) AS NUMERIC) * 100, 0)
    AS BierChipsPercent
FROM myTable
GROUP BY Country
这将为您提供:

Belgium 0.6666666666
France  0.25
Belgium 67
France  25
请注意,比利时的百分比四舍五入为67。如果您希望它是66,请使用
FLOOR
而不是
ROUND


这有一个SQL FIDLE。

您需要每个国家的棺材和芯片数量除以每个国家的总物品数量

棺材和芯片的计数如下:

COUNT(CASE WHEN Item IN ('Bier', 'Chips') THEN 1 END)
如果
项目
是Bier或Chips,则
案例
返回
1
,该值被计算在内。如果不是Bier或Chips,
案例
返回一个空值,该值不计算在内

总而言之:

SELECT
  Country,
      COUNT(CASE WHEN Item IN ('Bier', 'Chips') THEN 1 END) /
      CAST(COUNT(*) AS NUMERIC)
    AS BierChipsPercent
FROM myTable
GROUP BY Country
为什么
转换(计数(*)为数字)
?因为如果没有它,SQL Server似乎将两个计数都视为整数,所以当它们被除时,它会截断结果。将其转换为数字会使其正常工作,因此1/4将产生0.25而不是0

上述查询将为您提供:

Belgium 0.6666666666
France  0.25
Belgium 67
France  25
要得到百分比,只需乘以100。要获取整数,请应用ROUND()函数:

SELECT
  Country,
  ROUND(
      COUNT(CASE WHEN Item IN ('Bier', 'Chips') THEN 1 END) /
      CAST(COUNT(*) AS NUMERIC) * 100, 0)
    AS BierChipsPercent
FROM myTable
GROUP BY Country
这将为您提供:

Belgium 0.6666666666
France  0.25
Belgium 67
France  25
请注意,比利时的百分比四舍五入为67。如果您希望它是66,请使用
FLOOR
而不是
ROUND


这有一个SQL FIDLE。

您需要每个国家的棺材和芯片数量除以每个国家的总物品数量

棺材和芯片的计数如下:

COUNT(CASE WHEN Item IN ('Bier', 'Chips') THEN 1 END)
如果
项目
是Bier或Chips,则
案例
返回
1
,该值被计算在内。如果不是Bier或Chips,
案例
返回一个空值,该值不计算在内

总而言之:

SELECT
  Country,
      COUNT(CASE WHEN Item IN ('Bier', 'Chips') THEN 1 END) /
      CAST(COUNT(*) AS NUMERIC)
    AS BierChipsPercent
FROM myTable
GROUP BY Country
为什么
转换(计数(*)为数字)
?因为如果没有它,SQL Server似乎将两个计数都视为整数,所以当它们被除时,它会截断结果。将其转换为数字会使其正常工作,因此1/4将产生0.25而不是0

上述查询将为您提供:

Belgium 0.6666666666
France  0.25
Belgium 67
France  25
要得到百分比,只需乘以100。要获取整数,请应用ROUND()函数:

SELECT
  Country,
  ROUND(
      COUNT(CASE WHEN Item IN ('Bier', 'Chips') THEN 1 END) /
      CAST(COUNT(*) AS NUMERIC) * 100, 0)
    AS BierChipsPercent
FROM myTable
GROUP BY Country
这将为您提供:

Belgium 0.6666666666
France  0.25
Belgium 67
France  25
请注意,比利时的百分比四舍五入为67。如果您希望它是66,请使用
FLOOR
而不是
ROUND


这有一个SQL FIDLE。

您需要每个国家的棺材和芯片数量除以每个国家的总物品数量

棺材和芯片的计数如下:

COUNT(CASE WHEN Item IN ('Bier', 'Chips') THEN 1 END)
如果
项目
是Bier或Chips,则
案例
返回
1
,该值被计算在内。如果不是Bier或Chips,
案例
返回一个空值,该值不计算在内

总而言之:

SELECT
  Country,
      COUNT(CASE WHEN Item IN ('Bier', 'Chips') THEN 1 END) /
      CAST(COUNT(*) AS NUMERIC)
    AS BierChipsPercent
FROM myTable
GROUP BY Country
为什么
转换(计数(*)为数字)
?因为如果没有它,SQL Server似乎将两个计数都视为整数,所以当它们被除时,它会截断结果。将其转换为数字会使其正常工作,因此1/4将产生0.25而不是0

上述查询将为您提供:

Belgium 0.6666666666
France  0.25
Belgium 67
France  25
要得到百分比,只需乘以100。要获取整数,请应用ROUND()函数:

SELECT
  Country,
  ROUND(
      COUNT(CASE WHEN Item IN ('Bier', 'Chips') THEN 1 END) /
      CAST(COUNT(*) AS NUMERIC) * 100, 0)
    AS BierChipsPercent
FROM myTable
GROUP BY Country
这将为您提供:

Belgium 0.6666666666
France  0.25
Belgium 67
France  25
请注意,比利时的百分比四舍五入为67。如果您希望它是66,请使用
FLOOR
而不是
ROUND


这是我的选择,但我知道我也可以用over()来写


这是我的选择,但我知道我也可以用over()写


这是我的选择,但我知道我也可以用over()写


这是我的选择,但我知道我也可以用over()写


嗨,弗雷德,我也喜欢啤酒和薯条!您在进行此查询时遇到了什么特别的问题?到目前为止你都试了些什么?嗨,弗雷德,我也喜欢啤酒和薯条!您在进行此查询时遇到了什么特别的问题?到目前为止你都试了些什么?嗨,弗雷德,我也喜欢啤酒和薯条!您在进行此查询时遇到了什么特别的问题?到目前为止你都试了些什么?嗨,弗雷德,我也喜欢啤酒和薯条!您在进行此查询时遇到了什么特别的问题?到目前为止,您尝试了什么?对于sqlserver,它不适用于我,请选择c1,ROUND(COUNT(当c2在('Bier','Chips')中时,则为1 END)/COUNT(*)*100,0)作为myTable组中的BierChipsPercent BY c1抱歉-我刚刚意识到我测试的SQL Fiddle被设置为MySQL。在SQL Server中,计数被视为整数,因此除法结果被截断。我已经更新了我的答案,因此它将在SQL Server中正常工作。我答案底部的SQLFiddle链接现在指向了一个SQL Server fiddle。它不适用于我的SQL Server,选择c1,ROUND(COUNT(当c2在('Bier','Chips')中时,则为1 END)/COUNT(*)*100,0)作为myTable组中的BierChipsPercent BY c1抱歉-我刚刚意识到我测试的SQL fiddle被设置为MySQL。在SQL Server中,计数被视为整数,因此除法结果被截断。我已经更新了我的答案