`

今天帮助人解决的一个sql问题

sql 
阅读更多

            今天有个人问了一个问题,如下:

type     AD      value

        
A        in      200
A        out      50
B        in      100
一条sql 计算 每个type的剩余量
in 代表增减
out 代表减少.
 
      sql如下:
     
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
  `type` varchar(255) DEFAULT NULL,
  `AD` varchar(255) DEFAULT NULL,
  `value` int(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of test
-- ----------------------------
INSERT INTO `test` VALUES ('A', 'in', '200');
INSERT INTO `test` VALUES ('A', 'out', '50');
INSERT INTO `test` VALUES ('B', 'in', '100');
 
   我的解答如下:
   
select type,sum(value * (case when AD = 'in' then 1 when AD = 'out' then -1 end))  as '剩余量'
from test 
group by type;
 
    解题思路如下:
   每个type的剩余量,那么必须要对type进行分组。如果是单纯计算总量的话,我们直接对value进行sum即可,但是这个里面可以看出in是收入,out是支出,那么来看都是进行sum,只是符号变下即可,所以使用 case when语句就迎刃而解了。
 
分享到:
评论
2 楼 yepeng19920221 2014-10-10  
select a.type ,(a.insum-b.outsum) wastemoney from
( select m.type type,m.ad,sum(m.value) insum
from money m
group by m.type,m.ad
where m.ad="in"
) a
full outer join
( select m.type type,m.ad,sum(m.value) outsum
from money m
group by m.type,m.ad
where m.ad="out"
) b
where a.type=b.type
基于业务应该全外连接
1 楼 yepeng19920221 2014-10-10  
select a.type ,(a.insum-b.outsum) wastemoney from
( select m.type type,m.ad,sum(m.value) insum
from money m
group by m.type,m.ad
where m.ad="in"
) a
inner join
( select m.type type,m.ad,sum(m.value) outsum
from money m
group by m.type,m.ad
where m.ad="out"
) b
where a.type=b.type
自己写用了一种比较复杂的方法,你那个方法还是很灵活啊,一时想不到啊!   

相关推荐

    SQL附加数据库失败问题的解决方法

    一开始还以为数据库位置存在问题,所以重新放置了一个位置,仍然无效。最后,上网寻找解决方法。所幸的是此类问题还真有人遇到了,而且也有好几种解决方法。我就用了两种方法,分享一下吧: 方法一: 将要附加的文件...

    sql server 2008 R2 连接不上解决方案文档

    本文档旨在解决 SQL Server 2008 R2 连接不上的问题,提供了详细的解决步骤,以便帮助有需要的人解决类似的问题。本文档的内容涵盖了 SQL Server 服务的启动、配置和故障排除等方面的知识点。 SQL Server 服务的...

    SQL2000帮助文档

    SQL Server 2000是微软公司推出的一款关系型数据库...“爱书吧 电子书 教程 让更多人 读更多的书.url”可能是一个推荐的电子书资源网站,提供更多学习材料。这些资源对于深化SQL Server 2000的理解和实践都非常有帮助。

    SQL Server 2000帮助文档(英文版)

    SQL Server 2000的性能监视工具,如查询分析器和Profiler,可以帮助识别和解决性能问题。 11. **复制技术** SQL Server 2000的复制功能允许数据在多台服务器之间同步,支持发布、订阅和事务性、合并及快照复制,...

    SQL.Cookbook(中文高清PDF)

    在过去的10 年间,SQL 走过了很长的路,许多过去只能用C 和JAVA等过程化语言解决的典型问题现在都可以直接用SQL 解决了,但是很多开发人员并没有意识到这一事实。《SQL Cookbook中文版》就是要帮助大家认识到这一点...

    sqlservr64.zip

    总而言之,"sqlservr64.zip"提供的可能是修复SQL Server 2005 64位安装问题的必要文件,对于遇到类似问题的人来说,这是一个宝贵的资源。但是,为了正确应用这个解决方案,用户需要识别并替换相应的文件,这可能需要...

    SQL死锁,删除失败解决办法

    下面是一段用于检测和解决SQL死锁的脚本示例: ```sql SELECT t2.username, t2.sid, t2.serial#, t2.logon_time FROM v$locked_object t1, v$session t2 WHERE t1.session_id = t2.sid ORDER BY t2.logon_time; ```...

    解决SQL服务开启不了

    "解决SQL服务开启不了.txt"可能包含了解决此问题的步骤或建议。通常,解决此类问题的第一步是尝试手动启动服务,如果失败,我们可以查看错误日志获取更具体的故障信息。在SQL Server安装目录下的`MSSQL\Log`文件夹中...

    SQL Cookbook中文版

    例如,假如你有一个特定的业务问题要解决,目前只用SQL检索数据,而其他复杂的业务逻辑由其他语言完成,如果代码没有问题,而且性能也过得去,那么,谢天谢地。我绝对无意建议你扔掉以前的代码重新寻求完全SQL 的...

    Win10系统安装wincc flexible后出现SQL报错的解决办法.docx

    总的来说,解决Win10系统上WinCC flexible的SQL报错问题,关键在于正确处理与SQL Server LocalDB的冲突,并对软件进行修复。通过上述步骤,大多数情况下可以恢复软件的正常运行。如果问题持续存在,建议联系西门子的...

    SQL不允许保存更改

    在使用SQL Server 2012的过程中,有时用户会遇到一个令人头疼的问题:系统不允许保存对数据库表结构的更改。这个问题主要体现在尝试添加新字段或者修改现有字段时,SQL Server 2012拒绝保存这些更改。这种情况不仅...

    sql安装解决方法

    在SQL Server的安装过程中,有时会遇到一个令人头疼的警告信息:“以前的某个程序安装已在安装计算机上创建挂起的文件操作,运行安装程序之前必须重新启动计算机”。这个提示通常意味着系统在前一次安装尝试中留下了...

    sql数据库质疑解决办法

    总之,这些步骤构成了一个全面的SQL数据库质疑解决流程,涵盖了从配置调整、状态管理、数据文件修复到数据一致性检查的各个环节,对于确保数据库的稳定运行具有重要意义。在实际操作中,DBA应当根据具体情况灵活运用...

    sql 2000安装时提示挂起的解决方法

    然而,在安装过程中,有些用户会遇到一个让人头疼的问题——安装程序突然显示“挂起”,进程停滞不前,无法继续进行。这种情况下,通常会伴随一个错误代码或简短的错误描述,告知用户安装遇到了未知障碍。 ### 挂起...

    pl/sql最新中文手册

    PL/SQL是Oracle数据库系统中的一个关键组成部分,它是一种过程化语言,专为数据库操作设计。这个"PL/SQL最新中文手册"显然是一份详细解释PL/SQL 7.0版本的指南,对于学习和精通Oracle数据库编程至关重要。以下是手册...

    解决sql 2000挂起的批处理文件

    “已经帮助过很多人解决了”表明这个问题是普遍存在的,并且这个批处理文件经过了验证,对解决同类问题有较高的成功率。在实际应用中,用户只需双击运行这个批处理文件,它将自动执行必要的注册表更改,以解决SQL ...

    127个SQL+server热门资料汇总

    日志管理是数据库管理中的一个重要环节,本教程详细介绍了如何查看、分析和清理SQL Server的日志文件,帮助管理员确保数据库的稳定运行,同时避免因日志过大导致的性能问题。 ### SQL Server2005自学视频教程 针对...

    火车销售系统题目sql题目

    总的来说,这个压缩包提供了一个全面的学习资源,涵盖了从基础的SQL语法到更高级的数据库系统设计和管理,适合初学者逐步提升技能,同时也适用于有一定基础的人复习和巩固。通过解决这些题目,学生不仅可以掌握SQL...

Global site tag (gtag.js) - Google Analytics