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中,计数被视为整数,因此除法结果被截断。我已经更新了我的答案