Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >编写1个SQL查询,将3个独立的表与函数结合起来: group和case

编写1个SQL查询,将3个独立的表与函数结合起来: group和case
EN

Stack Overflow用户
提问于 2020-11-16 22:55:35
回答 1查看 93关注 0票数 0

我有3张表如下:

表school_a有4列:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
date: (2020-11-31,...)  
note: (20, 30, 40,...)  
home: (23.45, 45.34, 65.67, ...)  
id: (54326, 87332, ...)  

表school_b有4列:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
time: (2020-11-31,...)  
grade: (34, 54, 34,...)   
homework: (12.32, 34.65,...)   
user: ('student', 'professor', 'student',...)   

表school_c有4列:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
day:  (2020-11-31,...)  
number: (34, 54, 34,...)  
amount: (10.24 AGE, 11.25 AGE, 12.63 AGE, ...)    
title: ('54934-ST-string-student-str.st', '54934-ST-string-teacher-str.st',....)   

对不起,表的格式不太方便。

我创建了一个SQL查询来计算每个表所需的内容,但没有成功地将3个查询合并到一个表中。我无法理解我需要用来组合它的逻辑。

以下是每个表的SQL代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT 
    SUM(home/note) AS kpi,   
    CASE     
       WHEN id IN (34564, 87423, 89076, 32145, 87653) THEN 'Student'     
       WHEN id IN (67543, 87413, 78996, 34215 ) THEN 'Teacher'     
       ELSE 'Other'      
    END AS role   
FROM school_a     
WHERE date >= '2020-08-01' AND date <= '2020-08-31'    
GROUP BY role     

SELECT 
    SUM(grade)/COUNT(user) AS kpi,    
    CASE     
       WHEN user = 'Student' THEN 'Student'     
       WHEN user = 'Professor' THEN 'Teacher'        
       ELSE 'Other'      
    END AS role     
FROM school_b      
WHERE time >= '2020-08-01' AND time <= '2020-08-31'    
GROUP BY role     


SELECT 
    SUM((REPLACE(amount,' AGE',''))/number) AS kpi,   
    CASE     
       WHEN title IN ('41320 - ST-STtr-Student-str.st', '89064 - ST-stRst-str-strr user-strr.str/blablabla/strstr') THEN 'Student'   
       WHEN title IN ('43789 - ST-STred-Teacher-stee.str', '65283-CH-strstrs-teacher-strr.str--STR') THEN 'Teacher'     
       ELSE 'Other'     
    END AS role    
FROM school_c     
WHERE day >= '2020-08-01' AND day <= '2020-08-31'    
GROUP BY role   

正如您所理解的,我需要度量每个具有不同列名和不同列的表的kpi,这意味着2020年8月的整个月。

当我单独运行每个查询时,我得到了我现在需要的内容,我想将所有的3个查询合并为一个。如果我只创建一个查询,就会收到一条消息,如

错误:不明确的列名:角色

欢迎任何反馈意见来改进我当前的查询。感谢您的阅读。

-编辑以澄清结果

预期的结果是一个包含2列(角色和kpi)和3行(学生、教师、其他)的表。

使用“联合”,我几乎得到了我想要的:2列(角色和kpi)和超过3行,因为分组是学校,然后是角色。我只想要角色和每个角色的kpi之和。

EN

回答 1

Stack Overflow用户

发布于 2020-11-16 23:12:17

你试过简单地联合不同的输出吗?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT SUM(home/note) AS kpi,   
CASE     
WHEN id IN (34564, 87423, 89076, 32145, 87653) THEN 'Student'     
WHEN id IN (67543, 87413, 78996, 34215 ) THEN 'Teacher'     
ELSE 'Other'      
END AS role   
FROM school_a     
WHERE date >= '2020-08-01' AND date <= '2020-08-31'    
GROUP BY role     

UNION

SELECT SUM(grade)/COUNT(user) AS kpi,    
CASE     
WHEN user = 'Student' THEN 'Student'     
WHEN user = 'Professor' THEN 'Teacher'     
ELSE 'Other'      
END AS role     
FROM school_b      
WHERE time >= '2020-08-01' AND time <= '2020-08-31'    
GROUP BY role     

UNION

SELECT SUM((REPLACE(amount,' AGE',''))/number) AS kpi,   
CASE     
WHEN title IN ('41320 - ST-STtr-Student-str.st', '89064 - ST-stRst-str-strr user-strr.str/blablabla/strstr') THEN 'Student'   
WHEN title IN ('43789 - ST-STred-Teacher-stee.str', '65283-CH-strstrs-teacher-strr.str--STR') THEN 'Teacher'     
ELSE 'Other'     
END AS role    
FROM school_c     
WHERE day >= '2020-08-01' AND day <= '2020-08-31'    
GROUP BY role   

我没有做任何检查,但只要列匹配,就不会有问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64870589

复制
相关文章
SAP HANA SQL GROUP BY / ORDER BY / OVER / CASE
简单举例 select name, score1, score2, nextscore1, case when ((nextscore1 IS NOT NULL) AND (score1 - nextscore1 < 0.1)) then score2 else score1 end score_sort1, case when (nextscore1 IS NOT NULL) AND (score1
matinal
2020/11/27
1.1K0
SQL的单表查询
create database mydb1; Create database mydb2 character set gbk; Create database mydb3 character set gbk COLLATE gbk_chinese_ci;
全栈程序员站长
2021/07/22
2.2K0
编写SQL查询的最佳方法
毫无疑问,编写代码更像是一门艺术,而不是一门科学。即使有经验,每个编码人员也无法编写既可读又可维护的优美代码。一般来说,当您学习编码艺术时,编码会随着经验而提高。例如,组合重于继承或编码接口大于实现,但只有少数开发人员能够掌握这些技术。
liuxuewen
2018/10/17
1.7K0
使用group by,having,count函数查询表中某字段相同内容的数据
思路:使用group by分组,再用count计算每组的个数,最后用having比较计算后的值大于1的数据。
全栈程序员站长
2021/07/19
3.8K0
group by 和聚合函数
group by 的基本用法                                                                                                                                                                                                          group by做为分组来使用,后面为条件,可以有多个条件,条件相同的为一组,配
Ryan-Miao
2018/03/13
2.1K0
group by 和聚合函数
SQL 教程:如何编写更佳的查询
结构化查询语言(SQL)是数据科学行业中一项不可或缺的技能,一般来说,学习这个技能是挺容易的。不过,很多人都忘记了写查询只是SQL的第一步。我们还得确保查询性能优异,或者符合正在工作的上下文环境。
疯狂的技术宅
2019/03/27
1.7K0
SQL 教程:如何编写更佳的查询
sql sever模糊查询和聚合函数
使用is null 的时候 要确保 查询的列 可以为空! null:   01.标识  空值   02.不是0,也不是空串""   03.只能出现在定义 允许为null的字段   04.只能使用is  null 或者is not null 进行比较! 通配符 _ 一个字符 % 任意长度字符 [ ] 括号中所制定范围内的一个字符 [^] 不在括号中所指定范围内的一个字符 模糊查询 like 好像,包含 is (not) 是(否) = 拥有 beween 1 and 2 范围查询(1-2) in 完全匹配查询
房上的猫
2018/03/14
1.3K0
Oracle函数学习(单表查询和子查询)
–单表查询: –当需要的数据在一张表中,考虑使用单表查询 –多表联合查询: –当需要查询的数据分布在多张表中,考虑使用多表联合 –子查询学习: –使用时机:当查询的筛选条件不明确时,考虑使用子查询。 –单行子查询 –多行子查询
葆宁
2019/04/19
9090
Mysql常用sql语句(12)- group by 分组查询
https://www.cnblogs.com/poloyy/category/1683347.html
小菠萝测试笔记
2020/06/09
2.2K0
Mysql常用sql语句(12)- group by 分组查询
SQL语句汇总(终篇)—— 表联接与联接查询
既然是最后一篇那就不能只列出些干枯的标准语句,更何况表联接也是SQL中较难的部分,所以此次搭配题目来详细阐述表联接。
_DIY
2020/05/29
1.4K0
SQL语句汇总(终篇)—— 表联接与联接查询
SQL之单表查询
附上下面要用到的数据库和表的 SQL 语句,在数据库管理页面新建一个查询然后使用 CV 大法转移过去执行即可:
wsuo
2020/07/30
1.8K0
SQL三表连接查询
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/135565.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/18
2.1K0
记一次神奇的sql查询经历,group by慢查询优化
现网出现慢查询,在500万数量级的情况下,单表查询速度在30多秒,需要对sql进行优化,sql如下:
梁规晓
2019/09/24
1.4K0
记一次神奇的sql查询经历,group by慢查询优化
记一次神奇的SQL查询经历,group by慢查询优化
简单来说,就是查询一定条件下,都有哪些用户的。很简单的sql,可以看到,查询耗时为37秒。
数据和云
2019/12/27
1.2K0
记一次神奇的SQL查询经历,group by慢查询优化
浅谈共享表空间与独立表空间
共享表空间,又称系统表空间,在数据目录中,存储多张表的索引和数据文件,以ibdata1,2,3的形式,可以跨多个数据库使用
风起--追风
2023/09/08
4830
怎么编写容易读懂的SQL查询
毫无疑问,编写代码与其说是一门科学,不如说是一门艺术。即使有经验,每个程序员也不能编写既可读又可维护的漂亮代码。一般来说,当您学习编码的艺术时,编码会随着经验而改进,例如,喜欢使用 类的组合来代替类的继承或者基于接口编码而不是实现,但是只有少数开发人员能够掌握这些技术。 SQL查询也是如此。构建查询的方式和编写查询的方式,对于向开发人员传达您的意图大有帮助。当我在多个开发人员的邮件中看到SQL查询时,我可以看到他们的写作风格有明显的不同。 一些开发人员编写得非常整洁,并且对查询进行了适当的缩进,这使得很容易
程序你好
2018/07/20
8590
使用group by rollup和group by cube后的辅助函数
本文主要介绍,报表在使用group by rollup和group by cube后的辅助函数。 CREATE TABLE TEST8 ( "ID" NUMBER, "ORDERID" NUMBER, "PRODUCTID" NUMBER, "PRICE" NUMBER(10,2), "QUANTITY" NUMBER ) insert into TEST8 (ID, ORDERID, PRODUCTID, PRICE, QUANTITY) values
郑小超.
2018/01/24
1.9K0
记一次详细的的SQL查询经历,group by慢查询优化
现网出现慢查询,在500万数量级的情况下,单表查询速度在30多秒,需要对sql进行优化,sql如下:
数据和云
2019/09/26
1.9K0
记一次详细的的SQL查询经历,group by慢查询优化
MySQL 查询case
一、问题描述 一个经销商对应多个经营人员,一个经营人员有多张照片,查询一个经销商下的所有经营人员的最近照片 二、数据库表 1、经营人员表
week
2018/08/27
1.1K0
MySQL 查询case
sql连接查询和嵌套查询_sql子查询和连接查询
【例二】:查询 JAVA第一学年 课程成绩排名前十的学生 并且分数要大于80 的学生信息(学号、姓名、课程名称、分数)
全栈程序员站长
2022/09/22
4.4K0
sql连接查询和嵌套查询_sql子查询和连接查询

相似问题

使用CASE和group by的SQL查询

20

使用case和Group的SQL查询

31

sql查询语法case、join和group by

121

使用case和group进行sql查询的帮助

30

SQL Case语句和Group

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文