如何在表上选择并计算某些值的出现次数

2024-04-23

我请求你的帮助,因为我不太了解 SQL。

我需要计算表列中某些值的出现次数,以达到类似统计表的效果,如下图所示:

需要的结果:

Comment:

我的结果表需要有前两列(国家和站点)来自第一个表“Violations”,接下来的 5 列将包含状态表中每个可能的 id 值中“Violations”中的 status_id 出现次数(计数)。

解释:

因此,我有两个现有表:“违规”和“状态”。请看我的sqlfiddle http://www.sqlfiddle.com/#!2/fb466/1/0

违规行为:

  • id long,
  • 国家 varchar(20),
  • 站点 varchar(20),
  • status_id long,
  • ...在这种情况下其他列并不重要

Status:

  • id long,
  • 状态长 “状态”列的值 (1-4) 映射到字符串值:可疑违规 (1)、已确认违规 (2)、已确认无违规 (3)、未确定 (4)

我的连接结果(或仅基于一个表违规)是拥有应包含列的表:

  • 来自违规表:“国家/地区”和“站点”
  • 来自状态表:“可疑违规”、“已确认违规”、“已确认无违规”、“未确定”、“总计”(其中此列是违规表中发生次数的计数器)。

当前状态和新要求:

第一次尝试在下面完成(感谢 bluefeet)并且几乎是完美的......

select v.country,
v.site,
    SUM(case when s.id = 1 then 1 else 0 end) Total_SuspectedViolations,
    SUM(case when s.id = 2 then 1 else 0 end) Total_ConfirmedViolations,
    SUM(case when s.id = 3 then 1 else 0 end) Total_ConfirmedNoViolations,
    SUM(case when s.id = 4 then 1 else 0 end) Total_NotDetermined,
    COUNT(*) Total
from violations v
inner join status s
    on v.status_id = s.id
group by v.country, v.site

或没有加入:

select v.country,
v.site,
    SUM(case when v.status_id = 1 then 1 else 0 end) Total_SuspectedViolations,
    SUM(case when v.status_id = 2 then 1 else 0 end) Total_ConfirmedViolations,
    SUM(case when v.status_id = 3 then 1 else 0 end) Total_ConfirmedNoViolations,
    SUM(case when v.status_id = 4 then 1 else 0 end) Total_NotDetermined,
    COUNT(*) Total
from violations v
group by v.country, v.site

...但不包括 3 个问题,正如您在图片中看到的那样。我是说:

  • “- All -”应该计算所有国家/地区的出现次数
  • “- 未知 -” 应该计算一些不被认可的国家/地区的出现次数
  • “- All -”(关于每个国家/地区)- 应计算一个国家/地区内的出现次数

附加说明:

  • -Unknown-意义:

未知应该计算国家/地区的出现次数,例如数据库国家/地区表中不存在或名称/ID 错误的国家/地区,这就是为什么此处将其视为Unknown(我忘了提到有桌子Country在数据库中)。 对于网站来说也是如此,Unknown对于站点意味着有人在 Violations.status_id 中输入了错误的值,而不是范围 (1-4),因为这些值只是状态表中存在的可接受的值。

  • 我们可以假设表 Country 如下所示:

Country:

  • id long,
  • 名称 varchar(30)

请帮助我编写正确的sql查询,其中包括这3个条件,因为我有一个很大的问题要做。


The All案例可以使用轻松完成UNION声明(见sqlFiddle http://www.sqlfiddle.com/#!2/fb466/23对于结果):

(SELECT v.country,
    v.site,
    SUM(CASE WHEN v.status_id = 1 THEN 1 ELSE 0 END) Total_SuspectedViolations,
    SUM(CASE WHEN v.status_id = 2 THEN 1 ELSE 0 END) Total_ConfirmedViolations,
    SUM(CASE WHEN v.status_id = 3 THEN 1 ELSE 0 END) Total_ConfirmedNoViolations,
    SUM(CASE WHEN v.status_id = 4 THEN 1 ELSE 0 END) Total_NotDetermined,
    COUNT(*) Total,
    0  'isAll'
FROM violations v
GROUP BY v.country, v.site)
union(
SELECT v.country,
    '- All -',
    SUM(CASE WHEN v.status_id = 1 THEN 1 ELSE 0 END) Total_SuspectedViolations,
    SUM(CASE WHEN v.status_id = 2 THEN 1 ELSE 0 END) Total_ConfirmedViolations,
    SUM(CASE WHEN v.status_id = 3 THEN 1 ELSE 0 END) Total_ConfirmedNoViolations,
    SUM(CASE WHEN v.status_id = 4 THEN 1 ELSE 0 END) Total_NotDetermined,
    COUNT(*) Total,
  1  'isAll'
FROM violations v
GROUP BY v.country)
UNION (
SELECT '- All -',
    '- All -',
    SUM(CASE WHEN v.status_id = 1 THEN 1 ELSE 0 END) Total_SuspectedViolations,
    SUM(CASE WHEN v.status_id = 2 THEN 1 ELSE 0 END) Total_ConfirmedViolations,
    SUM(CASE WHEN v.status_id = 3 THEN 1 ELSE 0 END) Total_ConfirmedNoViolations,
    SUM(CASE WHEN v.status_id = 4 THEN 1 ELSE 0 END) Total_NotDetermined,
    COUNT(*) Total,
  1  'isAll'
FROM violations v)
ORDER BY country, isAll DESC, site

然而,这种查询的性能可能并不是很好,所以我并不是说这是最好的解决方案 - 但它确实有效。

带有“未知”的版本

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

如何在表上选择并计算某些值的出现次数 的相关文章

  • 将文件保存为 MYSQL 数据库中的 blob 或文件路径

    我知道这些问题是常见问题之一 但我需要您针对具体案例提供帮助 我正在开发一个应用程序 其中一些用户可以添加订单 一些用户可以执行这些订单 这些订单非常具体 因此只有有限数量的用户可以添加它们 然后 为每个订单生成三个文档 每个文档的大小不超
  • 计算数组元素的出现次数/频率

    在 Javascript 中 我试图获取一个初始的数值数组并计算其中的元素 理想情况下 结果将是两个新数组 第一个指定每个唯一元素 第二个包含每个元素出现的次数 不过 我愿意接受有关输出格式的建议 例如 如果初始数组是 5 5 5 2 2
  • 如何在 BigQuery 中取消透视?

    不确定要调用什么函数 但转置是我能想到的最接近的函数 I have a table in BigQuery that is configured like this 但我想查询一个配置如下的表 创建此表的 SQL 代码是什么样的 Thank
  • 将 List 保存到 ASP.NET 中的会话

    购物车项目保存在 SQL 数据库中 我想将所有 CartItems 放在一个 List 中并转移到 Instance Items The Instance变量正在保存到会话中 代码如下 public class ShoppingCart p
  • Spring JPA自定义查询与WHERE条件中的参数组合?

    如何在 Spring Data 中编写至少使用三个参数之一的 JPA 查询 我有这三个参数 Id PK Name Surname 客户端必须至少提供这三个参数之一 我想通过这些非空参数找到用户 是否可以为我的存储库创建此类自定义查询 或者我
  • 有用的库存 SQL 数据集吗?

    有谁知道有哪些资源可以提供优质 有用的股票数据集 例如 我下载了一个包含美国所有州 城市和邮政编码的 SQL 脚本 这在最近的一个应用程序中节省了我很多时间 我希望能够按地理位置进行查找 你们中有人知道其他可以免费下载的有用数据集吗 例如
  • MySQL SUM 具有相同的 ID

    抱歉 这个真正简单的问题 我刚刚学习 PHP 和 MySQL 我已经在谷歌上搜索了一个多星期 但没有找到任何答案 我创建了一个简单的财务脚本 表格如下 table a aid value 1 100 2 50 3 150 table b b
  • 在sql server中透视固定的多列表

    我有一个需要为报告服务进行旋转的表格 DateCreated Rands Units Average Price Success Unique Users 2013 08 26 0 0 0 0 0 2013 08 27 0 0 0 0 0
  • PL/pgSQL 中的 EXPLAIN ANALYZE 给出错误:“查询没有结果数据的目的地”

    我试图理解 PL pgSQL 函数中 select 语句的查询计划 但我不断收到错误 我的问题 如何获取查询计划 以下是重现该问题的简单案例 相关表名为 test table CREATE TABLE test table name cha
  • 如何在 JPQL 语句中使用类型转换?

    我有两个Integer数据库中的列 derby 和 db2 我需要将它们彼此分开JPQL 两列都是类型Integer如果余数是十进制数 则返回零 例如0 25变成0等等 这是可以理解的 因为类型是 int In SQL例如我可以有这个 se
  • mysql 查询从给定的表结构创建 SEO 友好的 url

    我正在尝试使用下表创建 SEO 友好的 URL 类别表 http sqlfiddle com 2 c474a 4 页表 http sqlfiddle com 2 c474a 5 我正在尝试编写一个 mysql 查询 该查询将使用产生以下输出
  • 如何将 SQL 参数中的字符串数组传递给 SQL 中的 IN 子句

    我正在以复杂的方式做一个逻辑 我只需要在存储过程中执行此查询 select Sizes SUM Quantity from tbl SizeBreakup where Brand brand and Combo in 1 2 我必须在 C
  • SQL 与 LINQ 性能 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Laravel 5.4 上传原始文件名和扩展名

    通过表单提交文件时 如何将原始文件名 file jpg 上传到数据库 控制器 public function addCv Request request cv Cv create request gt all file request gt
  • 如何对 MySQL 数据库中的 ENUM 列进行排序?

    I have colorMySQL 表中的列类型为ENUM RED YELLOW MY COLOR BLACK 还有另一个name列的类型是VARCHAR 30 我想按以下顺序获取所有表行 YELLOW首先行 排序依据name RED最后一
  • 是否可以使用不在 GROUP BY 中的 ORDER BY 列?

    正如标题所说 这是我的代码 SELECT material SUM Amount AS Amount RIGHT CONVERT varchar 50 date in 106 8 FROM rec stats GROUP BY materi
  • Oracle PL/SQL - NO_DATA_FOUND 异常是否对存储过程性能不利?

    我正在编写一个需要进行大量调节的存储过程 根据 C NET 编码中的常识 异常会损害性能 因此我也始终避免在 PL SQL 中使用它们 我在此存储过程中的调节主要围绕记录是否存在 我可以通过以下两种方式之一进行 SELECT COUNT I
  • Spring JPA (Hibernate) Entity Manager 何时将连接返回到连接池?

    在我的 java 进程中 我使用以下 spring 配置连接到 MySql Configuration EnableTransactionManagement PropertySources PropertySource classpath
  • GAE、JPA、XG 事务、实体组过多异常

    我知道 GAE 上的 XG 交易有 5 个实体组的限制 但我认为我在一项交易中仅使用 3 个组 商品 类别 商品类别 但仍然遇到此异常 引起原因 java lang IllegalArgumentException 在单个事务中对太多实体组
  • 如何使用 XQuery 将值列表从 XML 提取到行中?

    我有一个 XQuery 如下 DECLARE x XML SELECT x

随机推荐

  • nginx 缓存 HTML 文件该怎么办?

    我一直遇到缓存问题HTML我的项目中的文件 我有一个针对静态资源 图像 脚本 CSS 等 的缓存清除机制 但所有这些解决方案似乎都无法处理HTML缓存问题 I added expires 0 to Nginx on all HTML文件 但
  • AngularJs:只有单击两次后才会登录

    我是 AngularJs 的新手 我正在开发一个小型的角度应用程序 我的方法 我的 index html 页面有 2 部分 一个ng view and a 带有 4 个导航按钮的 div div 最初使用 ng show ng show v
  • #define 导致“预期的主表达式”错误

    define N 10 int main int x for int i 0 i
  • TVirtualStringTree 中的自动调整列大小

    攀登 TVirtualTreeView 的学习之山 我尝试创建一个自定义后代 以确保在调整控件大小时 最后一列的宽度完全填充控件的宽度 而不需要水平滚动条 我看到许多与 AutoFitColumns 相关的项目 一个方法和许多事件 但没有涵
  • 如何使用 LINQ 计算与条件匹配的元素数量

    我尝试了很多事情 但对我来说最合乎逻辑的似乎是这个 int divisor AllMyControls Take p gt p IsActiveUserControlChecked Count AllMyControls是一个集合UserC
  • 在屏幕上滑动手指激活按钮,就像按下按钮一样

    如果我的标题不够清楚 我会详细解释一下 假设我们有一个充满多个按钮 10 多个 的屏幕 我们按下一个按钮 激活 onTouch onClick 如果我们现在移动手指而不抬起它 我希望它激活它滑过的任何其他按钮 在这种特殊情况下 我希望当您滑
  • 使用 PHP 将音频文件转换为波形

    我正在寻找 PHP 类 它将获取音频文件并返回波形的图像文件 可以在此处看到类似的效果http soundcloud com rollin fire cru sets house house house house http soundcl
  • 如何获取Linux发行版名称和版本?

    在 Windows 中我读取注册表项SOFTWARE Microsoft Windows NT CurrentVersion ProductName获取操作系统的全名和版本 但在Linux中 代码 struct utsname ver un
  • 如何获取 CD/DVD 驱动器上文件更改的通知?

    我是 C 新手 必须使用 C 开发 Windows 窗体应用程序 该应用程序应跟踪以下内容 监控外部和内部的 CD DVD 驱动器 监控 CD DVD 驱动器上创建 修改和删除的文件 我可以通过以下方式获取 CD DVD 驱动器插入的系统通
  • 有没有办法在jupyter中一次删除所有单元格?

    我每天都会在堆栈溢出中回答 pandas 问题之前尝试我的解决方案 通常两到三天后 我使用的 jupyter 笔记本将有 n 个单元 除了通过删除当前笔记本创建新笔记本之外 还有其他方法可以一次性删除所有单元吗 D D一次删除一个单元格 您
  • VideoView 未从所需位置播放视频

    我正在使用VideoView和搜索栏 但是当我通过seekBar在所需位置上seekTo 时 它从头开始播放视频 我尝试这段代码 public void onProgressChanged SeekBar seekBar int progr
  • 如何将 ToolbarItem 放置在后缘?

    我试图将工具栏项目放置在工具栏 MacOS 的后缘上 我浏览了文档 发现以下内容 automatic 项目被放置在center bottomBar 对于 MacOS 不适用 cancellationAction 与工作表相关 confirm
  • Android针对不同屏幕应用样式

    我有一个应用程序 需要在两个不同的设备上运行 600x1024 480x800 对于这些设备 我想应用不同的样式 它们具有不同的比例 我该怎么做 因为它们都有 hdpi values hdpi values mdpi没有效果 P S And
  • 确定 python 函数是否已更改

    Context 我正在尝试在数据处理框架中缓存执行 kedro http kedro readthedocs io 为此 我想为 python 函数开发一个独特的哈希值 以确定函数体 或该函数调用的函数和模块 中的任何内容是否已更改 我调查
  • Dispose 如何与实体框架配合使用

    有人可以向我解释一下我们如何以及为什么需要使用 Dispose 吗 它是 ASP NET MVC 4 附带的默认控制器模板的一部分 当对象 在本例中是数据库中的数据 不再使用时 NET 中的垃圾收集器是否应该自动启动 从数据库加载时应使用
  • 在 Bash 中循环元组

    是否可以在 Bash 中循环元组 举个例子 如果以下内容有效 那就太好了 for i j in c 3 e 5 do echo i and j done 有没有一种解决方法可以让我循环遍历元组 for i in c 3 e 5 do IFS
  • HTML中有透明的颜色代码吗?

    我正在构建一个新网站 并且正在寻找一个透明的导航栏 以便背景可见 没有透明颜色代码 但有不透明样式 查看有关它的文档 开发者 mozilla org https developer mozilla org en US docs Web CS
  • 为什么 godbolt 生成的 asm 输出与我在 Visual Studio 中的实际 asm 代码不同?

    这是生成的代码godbolt https godbolt org z 1F1t6Z 以下是 Visual Studio 在我的 main asm 文件上生成的相同代码 通过 汇编器输出 字段下的 项目 gt C C gt 输出文件 gt 使
  • HRESULT:工作表上的 0x800A03EC。范围

    我在 Worksheet range 方法上收到 HRESULT 0x800A03EC 行数超过70K 办公室2007 Code Microsoft Office Interop Excel Range neededRange curren
  • 如何在表上选择并计算某些值的出现次数

    我请求你的帮助 因为我不太了解 SQL 我需要计算表列中某些值的出现次数 以达到类似统计表的效果 如下图所示 需要的结果 Comment 我的结果表需要有前两列 国家和站点 来自第一个表 Violations 接下来的 5 列将包含状态表中