有如下数据库表,自己新增模拟数据,并完成对应SQL 机构表: sys_org(id,name) 诉求事件表: petiton_appeal(id,content,datetime,org_id) 诉求人表: petition_visitor(id,name,id_number,phone,age) 诉求人员关联表: petition_appeal_visitor(id,appeal_id,visitor_id) 1,按月统计各个机构的诉求事件数,按数量降序 2,按月统计当月中诉求事件大于当月人员平均诉求数量的人员 3,按月统计各个部门诉求人数大于3的诉求件的数量 4,查询某个月诉求件数量大于机构名称为A的的机构名称和诉求件数量 5,查询某个月存在诉求人年龄小于18的诉求件的机构名称和诉求件数量

时间: 2024-04-17 21:28:06 浏览: 111
假设我们的数据库中已经存在了以下表: 机构表: sys_org(id, name) 诉求事件表: petition_appeal(id, content, datetime, org_id) 诉求人表: petition_visitor(id, name, id_number, phone, age) 诉求人员关联表: petition_appeal_visitor(id, appeal_id, visitor_id) 为了完成对应的SQL查询,我们首先需要新增一些模拟数据。以下是一些示例数据,你可以按照需要进行调整: 机构表数据: INSERT INTO sys_org(id, name) VALUES (1, '机构A'), (2, '机构B'), (3, '机构C'); 诉求事件表数据: INSERT INTO petition_appeal(id, content, datetime, org_id) VALUES (1, '诉求事件1', '2022-01-01', 1), (2, '诉求事件2', '2022-01-02', 1), (3, '诉求事件3', '2022-01-03', 2), (4, '诉求事件4', '2022-02-01', 2), (5, '诉求事件5', '2022-02-02', 3), (6, '诉求事件6', '2022-02-03', 3); 诉求人表数据: INSERT INTO petition_visitor(id, name, id_number, phone, age) VALUES (1, '诉求人1', 'ID001', '1234567890', 25), (2, '诉求人2', 'ID002', '9876543210', 30), (3, '诉求人3', 'ID003', '1111111111', 16), (4, '诉求人4', 'ID004', '2222222222', 20), (5, '诉求人5', 'ID005', '3333333333', 45), (6, '诉求人6', 'ID006', '4444444444', 18); 诉求人员关联表数据: INSERT INTO petition_appeal_visitor(id, appeal_id, visitor_id) VALUES (1, 1, 1), (2, 1, 2), (3, 2, 3), (4, 2, 4), (5, 3, 5), (6, 3, 6); 现在,我将为你提供每个问题对应的SQL查询: 1. 按月统计各个机构的诉求事件数,按数量降序: SELECT EXTRACT(MONTH FROM datetime) AS month, sys_org.name AS org_name, COUNT(petition_appeal.id) AS event_count FROM petition_appeal JOIN sys_org ON sys_org.id = petition_appeal.org_id GROUP BY month, org_name ORDER BY event_count DESC; 2. 按月统计当月中诉求事件大于当月人员平均诉求数量的人员: SELECT EXTRACT(MONTH FROM datetime) AS month, petition_visitor.name AS visitor_name FROM petition_appeal JOIN petition_appeal_visitor ON petition_appeal_visitor.appeal_id = petition_appeal.id JOIN petition_visitor ON petition_visitor.id = petition_appeal_visitor.visitor_id GROUP BY month, visitor_name HAVING COUNT(petition_appeal.id) > ( SELECT AVG(event_count) FROM ( SELECT EXTRACT(MONTH FROM datetime) AS month, petition_visitor.id AS visitor_id, COUNT(*) AS event_count FROM petition_appeal JOIN petition_appeal_visitor ON petition_appeal_visitor.appeal_id = petition_appeal.id JOIN petition_visitor ON petition_visitor.id = petition_appeal_visitor.visitor_id GROUP BY month, visitor_id ) AS event_counts WHERE event_counts.month = month ); 3. 按月统计各个部门诉求人数大于3的诉求件的数量: SELECT EXTRACT(MONTH FROM datetime) AS month, sys_org.name AS org_name, COUNT(petition_appeal.id) AS appeal_count FROM petition_appeal JOIN sys_org ON sys_org.id = petition_appeal.org_id WHERE petition_appeal.id IN ( SELECT appeal_id FROM petition_appeal_visitor GROUP BY appeal_id HAVING COUNT(DISTINCT visitor_id) > 3 ) GROUP BY month, org_name; 4. 查询某个月诉求件数量大于机构名称为A的的机构名称和诉求件数量: SELECT EXTRACT(MONTH FROM datetime) AS month, sys_org.name AS org_name, COUNT(petition_appeal.id) AS appeal_count FROM petition_appeal JOIN sys_org ON sys_org.id = petition_appeal.org_id WHERE sys_org.name = '机构A' GROUP BY month, org_name HAVING COUNT(petition_appeal.id) > ( SELECT COUNT(*) FROM petition_appeal WHERE EXTRACT(MONTH FROM datetime) = month ); 5. 查询某个月存在诉求人年龄小于18的诉求件的机构名称和诉求件数量: SELECT EXTRACT(MONTH FROM datetime) AS month, sys_org.name AS org_name, COUNT(petition_appeal.id) AS appeal_count FROM petition_appeal JOIN sys_org ON sys_org.id = petition_appeal.org_id WHERE petition_appeal.id IN ( SELECT appeal_id FROM petition_appeal_visitor JOIN petition_visitor ON petition_visitor.id = petition_appeal_visitor.visitor_id WHERE petition_visitor.age < 18 ) GROUP BY month, org_name; 希望以上SQL查询可以满足你的需求。如果有其他问题,请随时提出。

相关推荐

最新推荐

recommend-type

C#实现Excel表数据导入Sql Server数据库中的方法

在C#编程中,将Excel表数据导入到Sql Server数据库是一项常见的任务,尤其在数据迁移、数据处理或数据分析等场景中。以下是如何使用C#实现这一功能的详细步骤和相关知识点: 1. **创建目标数据库表**: 首先,你...
recommend-type

Django使用Mysql数据库已经存在的数据表方法

在Django框架中,通常我们使用ORM(对象关系映射)来定义模型并自动生成数据库表。然而,有时候我们可能已经有了一个预先存在的MySQL数据库表,需要在Django项目中使用这个表而不需要再次创建。本篇文章将介绍如何让...
recommend-type

88秒插入1000万条数据到MySQL数据库表的操作方法

在本教程中,我们将探讨如何在88秒内将1000万条数据高效地插入到MySQL数据库表中,使用的数据库版本为5.7。首先,遇到的问题是`PacketTooBigException`,这是由于单个数据包大小超过了MySQL服务器允许的最大值(默认...
recommend-type

SQLServer批量更新两个关联表数据的方法

在SQL Server中,批量更新两个关联表的数据是数据库管理中常见的操作,特别是在处理大量数据时。下面我们将详细探讨两种在SQL Server中实现这种批量更新的方法。 ### 方法1:使用JOIN进行更新 ```sql UPDATE a ...
recommend-type

java使用JDBC动态创建数据表及SQL预处理的方法

Java 使用 JDBC 动态创建数据表及 SQL 预处理的方法 Java 使用 JDBC 动态创建数据表及 SQL 预处理的方法是 Java 语言中常用的数据库操作技术。该方法主要涉及到 JDBC 操作数据库的连接、创建表、添加数据、查询等...
recommend-type

多传感器数据融合手册:国外原版技术指南

"Handbook of Multisensor Data Fusion" 是一本由CRC Press LLC出版的国外原版书籍,专注于多传感器数据融合领域。这本书包含了26个章节,全面覆盖了数据融合中的关键议题,如数据关联、目标跟踪、识别以及预处理等。 在数据融合领域,多传感器技术是至关重要的,它涉及多个传感器的协同工作,通过整合来自不同来源的数据来提高信息的准确性和完整性。数据融合不仅仅是简单地将不同传感器收集的信息叠加,而是要进行复杂的处理和分析,以消除噪声,解决不确定性,并提供更可靠的决策依据。这本书深入探讨了这个过程,涵盖了从基础理论到实际应用的各个方面。 数据关联是其中的一个关键主题,它涉及到如何将来自不同传感器的测量值对应到同一个实体上,这对于目标跟踪至关重要。目标跟踪则是监控特定物体或事件在时间序列中的位置和状态,需要处理诸如传感器漂移、目标遮挡和多目标混淆等问题。数据融合在这里的作用是提高跟踪的精度和鲁棒性。 识别部分可能涉及模式识别和分类技术,用于确定传感器数据所代表的对象或事件的身份。预处理步骤则通常包括数据清洗、校准、滤波和标准化等,目的是确保输入数据的质量,以便后续的融合算法能有效地处理。 书中的内容来源于权威且备受尊重的源,并引用了相关材料,列出了多种参考文献。尽管作者和出版商已尽力提供可靠的数据和信息,但他们不对所有材料的准确性和使用后果承担责任。此外,书籍版权受到严格保护,未经许可不得复制或传播,若要进行内部或个人使用,需获得CRC Press LLC的书面许可并支付相应的费用。 "Handbook of Multisensor Data Fusion" 是一份全面且深入的参考资料,对于想要了解和研究多传感器数据融合技术的读者来说,具有极高的价值。无论是学术研究还是实际工程应用,都能从中获取丰富的知识和指导。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

【元编程】:Python动态创建和修改函数的运行时魔法

![【元编程】:Python动态创建和修改函数的运行时魔法](https://blog.finxter.com/wp-content/uploads/2021/02/object-1-1024x576.jpg) # 1. 元编程的基本概念和重要性 在软件开发中,元编程(Metaprogramming)是指编写可以操作其他程序代码的代码。它允许程序在运行时生成、修改或者执行代码,这意味着你可以创建一个可以编写或者操作其他代码的系统。元编程的概念对于理解程序如何执行以及如何让程序更有效率和可维护至关重要。在这一章中,我们将简要概述元编程的基础知识,包括它的基本定义、历史背景以及在现代软件工程中的
recommend-type

Visual Studio Code中的python如何多行注释

在Visual Studio Code (VSCode) 中,处理 Python 代码的多行注释,你可以按照以下步骤操作: 1. **使用预设快捷键**: - 转到你要注释的多行文本,按 `Ctrl + Shift + `/ 或 `Cmd + Shift + `/(在Mac上)。这将添加三行开始于 `'''` 的多行字符串注释(三个单引号)。 2. **选择注释风格**: - 另一种方式是在菜单栏选择 "Edit" -> "Toggle Line Comment", 然后从下拉列表中选择 "Triple Quotes",这也适用于多行注释。 3. **使用代码片段**:
recommend-type

MyEclipse快捷键大全,提升编程效率

"myeclipse 快捷键" 在编程的世界里,高效的工作离不开快捷键的运用。MyEclipse作为一款强大的Java集成开发环境,拥有众多实用的快捷键,能够极大地提升开发效率。以下是一些常用且重要的MyEclipse快捷键及其功能: 1. Ctrl+Shift+O:自动导入缺失的类,这是非常常用的一个快捷键,可以帮助你快速整理代码中的导入语句。 2. Ctrl+F:全局查找,可以在当前文件或整个项目中查找指定文本。 3. Ctrl+Shift+K:查找下一个匹配项,与Ctrl+K一起使用可以快速在查找结果之间切换。 4. Ctrl+K:查找上一个匹配项,配合Ctrl+Shift+K可以方便地在查找结果间导航。 5. Ctrl+Z:撤销操作,如同“后悔药”,可以撤销最近的一次编辑。 6. Ctrl+C:复制选中的文本或代码,便于快速复制和粘贴。 7. Ctrl+X:剪切选中的文本或代码,与Ctrl+V配合可以实现剪切并粘贴。 8. Ctrl+1:快速修复,当出现错误或警告时,MyEclipse会提供解决方案,按此快捷键可快速应用建议的修复方法。 9. Alt+/:代码完成,自动补全代码,尤其在编写Java代码时非常实用。 10. Ctrl+A:全选当前文件或编辑器的内容。 11. Delete:删除选中的文本或代码,不选择任何内容时,删除光标所在字符。 12. Alt+Shift+?:查看当前方法或类的JavaDoc,了解函数用途和参数说明。 13. Ctrl+Shift+Space:智能提示,提供当前上下文的代码补全建议。 14. F2:跳转到下一个错误或警告,快速定位问题。 15. Alt+Shift+R:重命名,用于修改变量、方法或类名,所有引用都会相应更新。 16. Alt+Shift+L:列出并切换打开的编辑器。 17. Ctrl+Shift+F6:关闭当前编辑器的下一个标签页。 18. Ctrl+Shift+F7:切换到下一个高亮的匹配项。 19. Ctrl+Shift+F8:切换到上一个高亮的匹配项。 20. Ctrl+F6:切换到下一个打开的编辑器。 21. Ctrl+F7:在当前文件中查找下一个匹配项。 22. Ctrl+F8:在当前文件中查找上一个匹配项。 23. Ctrl+W:关闭当前编辑器。 24. Ctrl+F10:运行配置,可以用来启动应用或测试。 25. Alt+-:打开或关闭当前视图。 26. Ctrl+F3:在当前工作空间中搜索所选内容。 27. Ctrl+Shift+T:打开类型,可以快速查找并打开类文件。 28. F4:打开资源,显示所选资源的详细信息。 29. Shift+F2:跳转到上一次的位置,方便在代码间快速切换。 30. Ctrl+Shift+R:打开资源,全局搜索文件。 31. Ctrl+Shift+H:类型层次结构,查看类的继承关系。 32. Ctrl+G:查找行,快速定位到指定行号。 33. Ctrl+Shift+G:在工作空间中查找引用,追踪代码引用。 34. Ctrl+L:跳转到指定行号,方便快速定位。 35. Ctrl+Shift+U:切换大小写,对选中的文本进行大小写转换。 36. Ctrl+H:全局搜索,可以搜索整个工作空间中的代码。 37. Ctrl+G:查找字符,快速找到特定字符。 38. Ctrl+Shift+L:显示快捷键列表,随时查看所有可用的快捷键。 39. Ctrl+Shift+J:插入内联注释,方便快速添加临时注释。 40. Ctrl+Shift+M:引入所需导入的包,自动导入缺少的包。 41. Ctrl+Shift+O:优化导入,删除未使用的导入,并自动排序。 42. Ctrl+Shift+F:格式化代码,按照预设的代码风格进行格式化。 43. Ctrl+/:块注释,选中的代码会被注释掉。 44. Ctrl+\:取消块注释,恢复被注释的代码。 45. Ctrl+Shift+M:快速添加try/catch块,简化异常处理。 46. Ctrl+Shift+F4:关闭所有打开的编辑器。 47. Alt+Enter:显示上下文敏感的帮助或修复建议。 48. Ctrl+N:新建,创建新的文件或项目。 49. Ctrl+B:跳转到定义,快速查看变量或方法的定义。 50. Ctrl+Shift+F:格式化代码,与Ctrl+F不同的是,它会格式化整个文件。 51. Ctrl+/:行注释,对当前行进行注释。 52. Ctrl+Shift+/:块注释,选中的多行代码会被注释掉。 53. F7:在调试模式下,步进进入方法。 54. F6:在调试模式下,步过方法,不会进入方法内部。 55. F5:在调试模式下,强制步进进入方法,即使方法是native或者已经被优化。 56. Ctrl:选中多个选项,如在重构或查找替换时。 通过熟练掌握这些MyEclipse快捷键,你可以更加高效地编写和管理代码,提高编程的生产力。记得经常练习和使用,它们将成为你编程生涯中的得力助手。