SQL 中聚合函数的除法行为不符合预期

2024-01-14

我正在尝试在 SQL Server 2008 R2 中做一些交叉表。这部分没问题,但是,如果我尝试获取每个单元格的百分比,我就会遇到问题。

这是一个精炼的用例:一项调查,人们给出了他们最喜欢的颜色和最喜欢的水果。我想知道有多少人喜欢给定的水果和给定的颜色:

with survey as (
    select 'banana' fav_fruit, 'yellow' fav_color
     union select 'banana', 'red'
     union select 'apple', 'yellow'
     union select 'grape', 'red'
     union select 'apple', 'blue'
     union select 'orange', 'purple'
     union select 'pomegranate', 'green'
)
select
    s.fav_color, 
    sum(case 
          when s.fav_fruit = 'banana' then 1
          else 0
        end) as banana, 
    sum(case 
           when s.fav_fruit = 'banana' then 1
           else 0
         end) / sum(1)   -- why does division always yield 0? "+", "-", and "*" all behave as expected.
         * 100 as banana_pct,
     sum(1) as total
from 
    survey s
group by
    s.fav_color;

Results:

fav_color   banana banana_pct  total
------------------------------------
blue        0      0            1
green       0      0            1
purple      0      0            1
red         1      0            2
yellow      1      0            2

我所期待的:

fav_color   banana banana_pct  total
------------------------------------
blue        0      0           1
green       0      0           1
purple      0      0           1
red         1      50          2
yellow      1      50          2

请帮助我得到我所期待的东西?


您正在使用 SQL Server。这是一个复制该问题的更简单的示例:

select 1/2

SQL Server 进行整数除法。

将分母替换为类似的值sum(1.0) or sum(cast 1 as float) or sum(1e0)代替sum(1).

至少与我的预期相反,SQL Server 将带小数点的数字存储为 numeric/decimal 类型(请参阅here http://msdn.microsoft.com/en-us/library/ms179899.aspx) 而不是float。固定的小数位数可能会影响后续操作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL 中聚合函数的除法行为不符合预期 的相关文章

  • 可以使用表通配符创建 sql 查询吗?

    这可能是一个简单的问题 但我无法在网上找到解决方案 任何帮助将不胜感激 我正在尝试在 PHP 中创建一个 SQL 查询 并希望以某种方式将通配符应用于 TABLE 过滤器 可能是这样的 select from table 但是 到目前为止我
  • 通过 osql.exe 运行脚本时出现问题

    我尝试以这种格式运行我的软件的更新脚本 osql exe i path to script U 用户 P 密码 S sqlserver 位置 d 数据库名称 n b 大多数脚本的格式相同 并且都以 GO 结尾 其中很多都运行得很好 但随机脚
  • 什么时候应该使用 C++ 而不是 SQL?

    我是一名 C 程序员 偶尔使用 MySQL 来处理数据库 但我的 SQL 知识相当有限 但我肯定愿意改变这一点 目前 我正在尝试仅使用 SQL 查询对数据库中的数据进行分析 但我准备放弃了 转而将数据导入到C 中 用C 代码进行分析 我和同
  • MySQL中如何声明变量?

    如何在mysql中声明一个变量 以便我的第二个查询可以使用它 我想写一些类似的东西 SET start 1 SET finish 10 SELECT FROM places WHERE place BETWEEN start AND fin
  • SQL返回两行之间的秒差

    这个问题与SQL Server有关 我有下表 id size batch code product code additiontime 1 91 55555 BigD Red 2017 05 15 13 00 00 2 91 55555 B
  • JDBC插入实数数组

    我试图将一个真实的数组插入到 postgresql 数组中 该表的定义是 String sqlTable CREATE TABLE IF NOT EXISTS ccmBlock sampleId INTEGER block REAL 插入内
  • 同一索引操作上的不同估计行?

    简介和背景 我必须优化一个简单的查询 下面的示例 重写几次后 我认识到同一个索引操作的估计行数会根据查询的编写方式而有所不同 最初 该查询执行了聚集索引扫描 因为生产中的表包含二进制列 该表相当大 大约 100 GB 并且全表扫描执行起来需
  • 快速查询最新记录的方法?

    我有一张这样的表 USER PLAN START DATE END DATE 1 A 20110101 NULL 1 B 20100101 20101231 2 A 20100101 20100505 在某种程度上 如果END DATE i
  • 在 SQL Server 上执行分页的最佳方式是什么?

    我有一个数据库超过200万记录 我需要执行分页以在我的 Web 应用程序上显示 该应用程序每页必须有 10 条记录DataGrid 我已经尝试使用ROW NUMBER 但是这种方式会选择所有 200 万条记录 然后只得到 10 条记录 我也
  • 如何通过 SQL 表关联 SQL 中的实体

    我是数据库设计的初学者 我需要为项目创建数据库 我可以用面向对象的术语解释我想要做什么 值得庆幸的是 数据库专家会很友善地向我解释如何在数据库方面处理这个问题 我想创建一个与位置实体 州 城市 有关系的用户 ID 名称 实体 所以在编程语言
  • 获取带有计数的不同记录

    我有一张桌子personid and msg列 personid msg 1 msg1 2 msg2 2 msg3 3 msg4 1 msg2 我想得到总计msg对于每个personid 我正在尝试这个查询 select distinct
  • SQL 连接两个没有关系的表

    我有具有相同结构的不同表 我想通过其中一列将它们连接起来 问题是他们不共享该专栏中的信息 Table 1 Type A Name Value Table 2 Type B Name Value 结果表 在单列中 nameFromA name
  • SQL查询查找表的主键?

    我怎样才能找到哪一列首要的关键使用查询来创建表 这是重复的question https stackoverflow com questions 893874 mysql determine tables primary key dynami
  • Spark SQL 中的 SQL LIKE

    我正在尝试使用 LIKE 条件在 Spark SQL 中实现联接 我正在执行连接的行看起来像这样 称为 修订 Table A 8NXDPVAE Table B 4 8 NXD V 在 SQL Server 上执行联接 A revision
  • 同时从2个表中删除?

    我正在使用 asp net 和 sql 服务器 我有 2 个表 类别和产品 在产品表中 我的categoryId 为FK 我想要做的是 当我从类别表中删除类别时 我希望该类别中的所有产品都将在产品表中删除 如何才能做到这一点 我更喜欢使用存
  • 快速将列的副本添加到 MySQL 表

    我需要一种快速的方法来复制表中的 DATETIME 列并为其指定一个新名称 我的表中有一个名为 myDate 的列 名为 myResults 我需要一个查询来在名为 newDate 的表中创建一个新列 该列的数据与 myDate 列完全相同
  • SQL Server 数据库架构版本控制和更新

    对于我的应用程序 我必须支持更新方案 并且数据库可能会受到影响 我希望能够从旧版本更新到最新版本 而无需安装中间版本 例如 假设我有版本 A 最旧的版本 B 中间版本 和 C 新版本 我希望能够将版本 A 直接更新到版本 C 对于应用程序文
  • 如何通过SQL查询检查是否有JSON函数?

    有SQL 2016 中的 JSON 函数 https learn microsoft com en us sql t sql functions json functions transact sql例如 JSON VALUE JSON Q
  • 我是否需要在外键上指定 ON DELETE NO ACTION?

    我有以下与 SQL Server 2012 一起使用的 DDL CREATE TABLE Subject SubjectId INT IDENTITY 1 1 NOT NULL Name NVARCHAR 50 Not NULL CONST
  • 如何部署“SQL Server Express + EF”应用程序

    这是我第一次部署使用 SQL Server Express 数据库的应用程序 我首先使用实体 框架模型来联系数据库 我使用 Install Shield 创建了一个安装向导来安装应用程序 这些是我在目标计算机中安装应用程序所执行的步骤 安装

随机推荐

  • 在非管理员用户下从远程运行 PS cmdlet - 访问被拒绝

    我正在尝试通过 Invoke Command 远程运行 Get ScheduledTask 该用户是非管理员 但属于 远程管理用户 的一部分 PS 远程处理工作正常 在本地运行命令效果很好 但是通过 Invoke Command 运行它会出
  • FSM actor 在转到相同状态后不会触发 onTransition

    根据Akka FSM 文档 http doc akka io docs akka snapshot scala fsm html 笔记 可以使用 goto S 或stay 实现相同状态转换 当前处于状态 S 时 它们之间的区别在于 goto
  • Osmdroid - 自定义离线图块源更改位置

    我使用此代码来显示离线 Osmdroid 地图图块 问题是 我已将图块存储在位置 sdcard emulated0 0 中 有什么方法可以将它传递到 XYTileSource 中吗 Thx myMapView setTileSource n
  • jQuery iframe 模式关闭表单提交

    我有一个 jQuery 模态对话框 其中包含一个 iframe 该 iframe 包含一个表单 当用户提交表单时 我想关闭模式对话框 我怎样才能做到这一点 index php 上的 jquery 模态脚本
  • 如何修复客户端首选项不接受服务器选择的协议版本 TLS10 [TLS12]

    我想使用 sql server 数据库运行 spring boot 应用程序 但是当我运行它时 出现以下错误 com microsoft sqlserver jdbc SQLServerException The driver could
  • Webstorm 6 - 如何使 scss 文件观察器忽略文件

    我希望 SCSS 文件的文件观察器忽略文件名以下划线开头的文件 例如 buttons scss 我该怎么做呢 首先向您想要忽略的文件添加 完成 来自文档 http sass lang com docs yardoc file SASS RE
  • 尝试设置 Laravel 4 给出“无法打开流:没有这样的文件或目录”

    尝试在 Mac 上设置 Laravel 4 我已经安装了 Composer 但是当我通过 XAMPP 进入公共文件夹时 我得到以下信息 警告 require Applications XAMPP xamppfiles htdocs lara
  • 在 Python 脚本中使用 FFProbe

    我对 python 相当陌生 这是我的第一个真正的项目 我遇到了障碍 我这里有一个 wmv 文件 我使用 FFprobe 从 wmv 文件中提取持续时间 以秒为单位 当我在 CMD 中运行以下命令时 ffprobe i Video2 wmv
  • 多对多关联。数据不删除

    我有这个模型 Entity Table name candidate XmlRootElement name candidate public class Candidate ManyToMany mappedBy candidates f
  • 同一个构造函数是否可以有不同的行为?

    我正在写一个 SQL 解释器 我需要区分编译时格式错误的表达式和运行时错误 我将给您提供一个应该格式良好但可能在运行时失败的示例 SELECT ColumnName first name AS name FROM TABLE people
  • 将 OpenXML 中的文本支架替换为图像

    下面的代码使用 OpenXML 在 word 文档的末尾插入图像 我需要做的是尝试在文档中找到名为 Image Holder 的项目 并将其替换为我传递的图像 这是将其添加到文档末尾的当前代码 var element new Drawing
  • Salt Generation 和开源软件

    据我了解 生成盐的最佳实践是使用源代码中存储的一些神秘公式 甚至魔术常数 我正在开发一个计划作为开源发布的项目 但问题是源代码带来了生成盐的秘密公式 因此能够在我们的网站上运行彩虹表攻击 我认为很多人在我之前已经考虑过这个问题 我想知道最佳
  • 如何在Android应用程序中创建进度对话框?

    我正在开发应用程序以从互联网接收一些数据 同时接收我想要显示 进度对话框 的数据 我用了 异步任务 在我的应用程序中 问题是如何使用它以及如何显示百分比 如 100 请建议我并给我一些例子 谢谢你 对不起我的英语 要显示进度对话框 您可以使
  • 使用matlab保存函数

    是否可以在函数内使用 Matlab save 命令来存储工作区变量 考虑以下场景 我在 Matlab 工作区中有一堆变量 并且希望 mat 文件中所有以 a 和 b 开头的变量 当然这有效 save test mat a b 但我想要一个可
  • Vuejs:渲染后回调

    我有一个 Bootstrap 弹出窗口 我想将其附加到具有条件渲染的元素 因此 我必须在元素附加到 DOM 后触发 popover 有没有办法触发回调afterv if 语句将元素插入到 DOM 中 在 vuejs 2 中使用它 updat
  • 查找列表中 int 的索引

    有没有办法从列表中获取 int 的索引 寻找类似的东西list1 FindIndex 5 我想在列表中找到 5 的位置 Use the IndexOf 列表的方法 该方法的规范可以在MSDN http msdn microsoft com
  • Polars:在 read_csv 中一次指定所有列的数据类型

    In Polars https www pola rs 如何为中的所有列指定单一数据类型read csv 根据docs https pola rs github io polars py polars html reference api
  • Google 地图 API autocomplete.getPlace() 返回的几何图形不一致

    我在 AngularJS 应用程序中使用 GoogleMaps 自动完成功能 当我调用 autocomplete getPlace 当我尝试使用地方时 有一半的时间它说几何图形为空 一半的时间都有效 似乎无法弄清楚 我唯一的想法是我的代码在
  • 从 MCV2 视图中的模型集合中读取 DataAnnotations

    在我的 MVC2 AdminArea 中 我想为每个域模型创建一个概述表 我正在使用如下所示的 DataAnnotations 作为这些域模型对象的属性 DisplayName MyPropertyName public string Na
  • SQL 中聚合函数的除法行为不符合预期

    我正在尝试在 SQL Server 2008 R2 中做一些交叉表 这部分没问题 但是 如果我尝试获取每个单元格的百分比 我就会遇到问题 这是一个精炼的用例 一项调查 人们给出了他们最喜欢的颜色和最喜欢的水果 我想知道有多少人喜欢给定的水果