找回密码
 立即注册

QQ登录

只需一步,快速开始

数据民工 悬赏达人认证 活字格认证

高级会员

34

主题

801

帖子

1565

积分

高级会员

积分
1565

时代开发者征文活动悬赏达人活字格高级认证活字格认证

数据民工 悬赏达人认证 活字格认证
高级会员   /  发表于:2022-1-23 20:13  /   查看:2564  /  回复:8
学习活字格一个月了,每天学习心得都发新手训练营,过年有时间整理发出来,今天学习视图小有收获,也希望能有大佬能给指点,点评一下,非常感谢!


今晚学习内容继续学习视图,主要是发现有很多数据的处理还有调用,还有多种数据表的数据重新拼凑都可以用视图来做,页面上只做展现和部分操作数据的数据传递,固定数据的操作交给视图,不固定的数据交给服务端命令。学习SQL满足现阶段需求后,开始主攻服务端命令,基本上学习任务就转为项目实践,在论坛里找经典需求,自己做项目实践。这就是目前的学习路径。今晚学习数据表做条件查询数据表,也就是表对表查询,和汇总,做了一个demo,


第一次写SQL(从没接触过,没学过数据库相关),不知道写的SQL,对不对?希望能有大佬给点评一下,非常感谢


SELECT z."ID",z."条件1",z."条件2",z."条件3",sum(case when b."结果"="A" then 1 else 0 end) 结果A,sum(case when b."结果"="B" then 1 else 0 end) 结果B FROM "表1" b,"表2" z WHERE z."条件1"=b."条件1" and z."条件2"=b."条件2" group by z."ID"


a4d2daef7dbc6b2d5cc86df99ca7e79.png263330992.png


小demo,希望大佬指正。

测试视图两个表匹配.fgcc (84.48 KB, 下载次数: 180)

8 个回复

倒序浏览
有心
中级会员   /  发表于:2022-1-25 08:09:54
沙发
表1和表2建议用ID做关联,用条件做关联会存在完全相同的情况。
比如:表1中同时存在2条记录,条件1和条件2的值完全相同。
回复 使用道具 举报
数据民工悬赏达人认证 活字格认证
高级会员   /  发表于:2022-1-25 08:53:04
板凳
有心 发表于 2022-1-25 08:09
表1和表2建议用ID做关联,用条件做关联会存在完全相同的情况。
比如:表1中同时存在2条记录,条件1和条件2 ...

那个ID只是数据表自带的编号,我做这个是为了用表2作为查询条件,表2作为被查询表,批量查询,统计符合条件查询到结果列A或者B的个数,之后返回一个结果集!你应该是没看懂我说的意思!
回复 使用道具 举报
数据民工悬赏达人认证 活字格认证
高级会员   /  发表于:2022-1-25 08:58:15
地板
有心 发表于 2022-1-25 08:09
表1和表2建议用ID做关联,用条件做关联会存在完全相同的情况。
比如:表1中同时存在2条记录,条件1和条件2 ...

建议下载我写的demo,运行一下,把表1,表2填点数据,看看啥结果
回复 使用道具 举报
有心
中级会员   /  发表于:2022-1-26 15:07:13
5#
你好。你是想对2个表的数据进行对比,统计对比结果,对吗?
表1.条件1=表2.条件1
表1.条件2=表2.条件2
完全满足以上条件的数据,显示“A”,否则显示“B”。
然后统计A和B的数量。
回复 使用道具 举报
数据民工悬赏达人认证 活字格认证
高级会员   /  发表于:2022-1-26 15:18:59
6#
有心 发表于 2022-1-26 15:07
你好。你是想对2个表的数据进行对比,统计对比结果,对吗?
表1.条件1=表2.条件1
表1.条件2=表2.条件2

表1的数据多是数据表,表2的数据少条件表,(Demo里的数据只是示例),用表2的数据作为条件去查询,符合条件的表1的数据有多少条,再分别统计A和B的数量,因为A和B会同时存在。不是单独只统计一项。我写的SQL对吗?对的话有没有改进空间,不对的话,请指教,规范的写法是什么样的?谢谢
回复 使用道具 举报
有心
中级会员   /  发表于:2022-1-26 15:51:31
7#
1、首先统计数据不需要体现在数据库中,这样增加数据库的容量。通过SQL查询语句就可以实现。
2、统计数量应该是一个结果,而不是在每行上都有体现。
image.png122813109.png
第3个表格是查询数据结果是A还是B。
SELECT * FROM table1
SELECT * FROM table2
SELECT
z.id
,z.ifone AS "条件1"
,z.iftwo AS "条件2"
,CASE WHEN z.ifone=b.ifone AND z.iftwo=b.iftwo THEN 'A' ELSE 'B' END AS "结果"
FROM  table1 b,table2 Z WHERE z.id=b.id

第4个表格用到一个group by 函数,统计A和B的数量。
select 结果,count(结果) as 数量 from (
select
CASE WHEN a.ifone=b.ifone AND a.iftwo=b.iftwo THEN 'A' ELSE 'B' END AS "结果" from table1 a
inner join table2 b on a.id = b.id ) as a group by a.结果
回复 使用道具 举报
数据民工悬赏达人认证 活字格认证
高级会员   /  发表于:2022-1-26 16:25:03
8#
有心 发表于 2022-1-26 15:51
1、首先统计数据不需要体现在数据库中,这样增加数据库的容量。通过SQL查询语句就可以实现。
2、统计数量 ...

感谢大佬的指导,我那个表3不是一个数据表,是一个视图。我的目标是一次性对比N条数据,结果集都呈现在视图里,需要的话再保存到数据库里。我会认真总结大佬写的SQL的,非常感谢
回复 使用道具 举报
凯神Jump悬赏达人认证 活字格认证
中级会员   /  发表于:2022-1-27 09:10:46
9#
有个小建议:为了便于各位大佬理解和回复,建议在发帖时使用真实的表名和列名,而不是用表1、表2、列1、列2,这样比较抽象了~~~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部