行转列,动态列枚举分组

news2024/11/24 4:05:30

【问题】

Hi All,

Thanks for the wonderful support the community gets from this forum.

I am trying to accomplish this in MongoDB. Didn’t think it could get this complicated. thought the problem was interesting to solve.

I am trying to get a count of students by scores for various subjects.

the example below shows 2 subjects, in reality we could run this ad-hoc query for 1 or more subjects. (so cannot “can” and should be real-time)

(for e.g. run the query for a bunch of schools and a bunch of subjects)

the grades are always 1-5 no decimal point

use students

db.studentsummary.insert ({school:‘atl1’, sname : ‘Sean’ , sub1: 4, sub2 :5})

db.studentsummary.insert ({school:‘atl1’, sname : ‘chris’ , sub1: 4, sub2 :3})

db.studentsummary.insert ({school:‘atl1’, sname : ‘becky’ , sub1: 5, sub2 :4})

db.studentsummary.insert ({school:‘atl1’, sname : ‘sam’ , sub1: 5, sub2 :4})

db.studentsummary.insert ({school:‘atl2’, sname : ‘dustin’ , sub1: 2, sub2 :2})

db.studentsummary.insert ({school:‘atl2’, sname : ‘greg’ , sub1: 3, sub2 :4})

db.studentsummary.insert ({school:‘atl2’, sname : ‘peter’ , sub1: 5, sub2 :1})

db.studentsummary.insert ({school:‘atl2’, sname : ‘brad’ , sub1: 2, sub2 :2})

db.studentsummary.insert ({school:‘atl2’, sname : ‘liz’ , sub1: 3, sub2 :null})

Desired Output:(Would like to see how close we could get to the desired output below)

show how many got a 5; how many got a 4 and so on…

I tried quite a bit - trying to group by each subject and run different pipelines based on the subjects chosen for query and let the front end manage the merge and pivot , performance was unacceptable. what not.

help will be very highly appreciated.

【回答】

Mongodb 不直接支持行转列,枚举分组做起来也很麻烦,要把数据读出来再用 Java、Php 等编程语言来实现;还涉及到动态列,实现这样的集合运算也很麻烦。使用 SPL 完成这个需求更容易。以下例子不使用 MongoDB 展现,如果使用 MongoDB 需要用 SPL 的 mongo_open()函数连接数据库,用 mongo_shell() 函数查询原始数据结构

A

B

C

1

=mongo_open(“mongodb://localhost:27017/local?user=test&password=test”)

2

=mongo_shell(A1,“student.find()”)

3

=[5,4,3,2,1]

>subs=[“sub1”,“sub2”]

4

=A2.group(school)

>newfields=[]

5

for subs

>newfields=newfields|A3.(A5+“_”+string(~))

6

>result=create(${“school,”+newfields.concat@c()})

7

for A4

>temp=[]

8

for subs

>temp=temp|A7.align@a(A3,${B8}).(~.len())

9

>temp=[A7.school]|temp

10

>result.record(temp)

11

>mongo_close(A1)

A1、A2:查询原始数据到 A2 序表

A3、B3:准备动态的分数段和列名

A4:将原始数据按学校分组

A5、B5、A6:生成结果表,结构是 school、sub1_5、sub1_4…sub1_1、sub2_5、sub2_4…sub2_1

A7:按学校循环,准备每次向 result 中插入一条数据(B10)

B8、C8:根据 subs 循环,将 A4 中单个学校各科的学生成绩统计出来并按顺序拼接成序列。统计时将 A7 的某科目(B8)按照 A3 对齐分组

B9:拼接学校名称到上述序列,这样值可以和 result 序表的顺序对应上了

B10:插入数据到结果表

如果非动态列,科目较少,写法简化一点,逻辑与上面的方法大同小异:

A

1

=mongo_open(“mongodb://localhost:27017/local?user=test&password=test”)

2

=mongo_shell(A1,“student.find()”)

3

=A2.group(school)

4

=[5,4,3,2,1]

5

=A3.new(school,~.align@a(A4,sub1).(~.len()):sub1,~.align@a(A4,sub2).(~.len()):sub2)

6

=A5.new(school,~.sub1(1):sub1\_5,~.sub1(2):sub1\_4,~.sub1(3):sub1\_3,~.sub1(4):sub1\_2,~.sub1(5):sub1\_1,~.sub2(1):sub2\_5,~.sub2(2):sub2\_4,~.sub2(3):sub2\_3,~.sub2(4):sub2\_2,~.sub2(5):sub2\_1)

7

>mongo_close(A1)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/158221.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【库函数】-还在为操作字符串而烦恼,一篇带你解决这样的烦恼,这里详细介绍关于字符串操作的各个库函数,以及模拟实现

🎇作者:小树苗渴望变成参天大树 🎉作者宣言:认真写好每一篇博客 💥作者gitee:link 如 果 你 喜 欢 作 者 的 文 章 ,就 给 作 者 点 点 关 注 吧! 字符函数和字符串函数💦前言&…

python函数定义中的/和*的作用

python函数定义中的/和*的作用 特殊参数https://docs.python.org/zh-cn/3/tutorial/controlflow.html#special-parameters 函数定义中的单独出现的/和*的作用 / 和 * 是可选的。 /用来指明他前面的函数形参必须使用位置参数。 *用来指明他后面的函数形参必须为关键字参数的…

儿童感染新冠后怎么用药?什么情况需要就医?

儿童感染新冠病毒的症状,病程有哪些特点?退烧药怎么选,怎么吃?孩子有什么症状需要立即就医?...01儿童感染新冠病毒的症状,病程有哪些特点?王泉:儿童是新冠病毒的易感人群。新冠病毒感…

Unity C#热更新框架ILRuntime接入

简介 ILRuntime项目为基于C#的平台(例如Unity)提供了一个纯C#实现,快速、方便且可靠的IL运行时,使得能够在不支持JIT的硬件环境(如iOS)能够实现代码的热更新 官方教程 https://ourpalm.github.io/ILRunt…

揭开 TLS 握手的神秘面纱:它是什么以及它是如何工作的

传输层安全性 (TLS) 旨在为网络通信增加安全性。 就是浏览互联网时HTTP和HTTPS的区别。 使用 TLS 为客户端和服务器增加了额外的工作,但它有其好处,包括: 机密性:TLS 将流量包装在加密隧道中。 这使得窃听者不可能在到达目的地的…

[Swift]UIView抖动动画

以拨打视频电话时的拨打按钮抖动为例 import UIKitclass PACallPrepareAlertView: UIView {IBOutlet weak var callIV: UIImageView!private var isLeave: Bool falsedeinit {isLeave true}override func awakeFromNib() {super.awakeFromNib()shakeAction()}private func s…

套接字编程之接口

套接字编程之接口学习套接字之前你需要知道的套接字编程套接字TCP协议和UDP协议区别UDP协议的编写UDP通信两端流程具体操作接口介绍创建套接字为套接字绑定地址信息发送数据接收数据关闭套接字字节序相关接口📌————本章重点————📌 🔗…

【Ansible】ansible 变量

ansible 变量 文章目录ansible 变量一、Ansible 变量介绍二、变量命名规则三、变量类型1.全局变量2.剧本变量3.资产变量4.Facts 变量5.注册变量6.变量优先级一、Ansible 变量介绍 在 PlayBook 一节中,将 PlayBook 类比成了 linux 中的shell。那么它作为一门 ansibl…

搜索引擎收录查询,是什么影响了网站被搜索引擎收录

搜索引擎收录是指程序通过辨别把网站内容进行收录,同时会对这些内容进行价值以及其他方面的辨别。 我们想要知道网站有没有被搜索引擎收录,可以借助iis7seo批量查来查询网站有没有被搜索引擎收录。打开iis7seo批量查,添加需要查询的网站网址&…

计算结构体,位段,联合体(共用体)的大小

目录 一、计算结构体的大小 1.1 结构体的计算并不是简单的类型加运算 1.2 内存对齐 1.2.1 内存对齐规则 1.2.2 图解内存对齐 二、计算位段的大小 2.1位段是什么 2.2 位段的内存分配 三、计算联合体的大小 3.1 什么是联合体 3.2 联合体的内存分配 END. 一、计算结构…

Consensus Algorithm -- Raft

The Raft Consensus Algorithm Go 实现:etcd/raft、dragonboat Rust 实现:TiKV C 实现 :nebula-graph-storage、 RethinkDB、logcabin 拜占庭将军问题 拜占庭将军问题(Byzantine failures),是由莱斯利兰…

绝绝子!这些技巧真方便

技巧一:快速切换窗口 如果你还在使用桌面底部“任务栏”切换软件窗口,不妨试试这个“快速切换窗口”快捷键,仅需按住【Alt】键不放,并连续点按【tab】键即可实现窗口的快速切换,果真只有亲自上手体验才知道有多香&…

NLP中的对话机器人——问答机器人的应用场景

引言 本文是七月在线《NLP中的对话机器人》的视频笔记,主要介绍FAQ问答型聊天机器人的实现。 讲得还不错,关键是只要1分钱 FAQ问答机器人 FAQ就是一些常见问题与回答,比如https://letsencrypt.org/docs/faq/。 但是我们要做的不是一问一答…

原生RedHat OpenStack搭建

文章目录OpenStack的搭建方式实验软件及镜像实验环境配置NTP节点初始化配置配置本地yum仓库上传镜像文件至NTP节点搭建基于http的网络yum源搭建NTP服务配置Controller控制节点和Compute计算节点初始化配置安装RedHat OpenStack安装部署OpenStack配置OVS桥接OpenStack的搭建方式…

大赛启幕:2023数字中国创新大赛启动发布会在福州召开

2023年1月10日,由数字中国建设峰会组委会主办,福建省数字办、福建省工信厅、福建省通信管理局、福州市政府、泉州市政府、三明市政府、龙岩市政府等共同承办的2023数字中国创新大赛在福建省福州市盛大启幕。 十二届全国政协副主席王钦敏发来书面致辞。中…

Windows 10随机性死机怎么办?

在诸多的电脑问题中,死机算是格外恼人。尤其是当你正在编辑文档,正在做图,正在玩游戏,电脑突然死机,万一再加上没保存…… 如果你在使用Win10系统的过程中遇到随机性死机的问题,赶紧看看这篇文章。 小编整…

LeetCode 113. 路径总和 II

🌈🌈😄😄 欢迎来到茶色岛独家岛屿,本期将为大家揭晓LeetCode 113. 路径总和 II,做好准备了么,那么开始吧。 🌲🌲🐴🐴 一、题目名称 LeetCode …

简单通讯录的实现

这次我们来实现一个简单的通讯录 目录 1.基本框架及的实现 2.相关结构体的实现 3.通讯录的初始化 4.新建联系人 5.显示所有联系人信息 6.删除联系人 7.查找指定联系人 8.修改联系人信息 9.对联系人进行排序 10.完整代码 既然是通讯录,我们要实现以下内容 …

内存泄漏调优案列

案列背景 最近在做公司项目核心接口压测和稳定性压测时,各接口的成功率不足99.99%,通过分割压测之后发现,在压测A服务时,内存上升明显,且伴有频繁的fgc发生 jvm老年代内存使用率已经达到了100%且应用的fgc有5000次&am…

离散数学与组合数学-02二元关系上

文章目录离散数学与组合数学-02二元关系上2.1 序偶和笛卡尔积2.1.1 有序组的定义2.1.2 笛卡儿积笛卡儿积的性质2.2 关系的定义2.2.1 二元关系定义与案例2.2.2 二元关系的数学符号定义案例枚举二元关系2.2.3 定义域和值域2.2.4 二元关系概念的推广2.3 关系的表示2.3.1 集合表示法…