mysql 多条记录判断相加减进行计算

code        pay    payflag
  00001   100.00   0
  00001   50.00     1
  00001   50.00     0
  00002   200.00    0
  
  pay 是 decimal,payflag 0 是付款, 1 是退款
  把code相同并payflag=0的pay相加减去payflag=1的pay得到下面这下的数据
 
  code        pay  
  00001   100.00  
  00002    200.00

第一种:

select code,sum(pay*(case payflag when 1 then -1 else 1 end)) as pay
from [table]
group by code

第二种:

select code,sum(if(payflag=0,pay,-1*pay))
from tt

group by code

第三种

select code, sum(pay*(cos(PI()*payflag))) as pay
from [tablename]
group by code
时间: 2024-08-27 13:38:41

mysql 多条记录判断相加减进行计算的相关文章

mysql判断一条记录是否存在,如果存在,则更新此语句,如果不存在,则插入

mysql判断一条记录是否存在,如果存在,则更新此语句,如果不存在,则插入 直接上代码 BEGIN #定义一个变量来保存该记录是否存在 declare num int; #这条sql,就是查询对应的记录有多少条,注意 into num 这两句话,就是把count(*) 查出的值,赋给到num中 select count(*) into num from t_count_view where TO_DAYS(now())=TO_DAYS(day); #接下来的就是判断了,注意,判断是否等于,只有一

MySQL 快速构造一亿条记录的表

  在上一次朋友问我如何快速构造一亿条记录的表后,我理出了实行的办法,见:http://blog.csdn.net/mchdba/article/details/52938114,但是因为录入一亿表需要2个小时,所以还是感觉速度慢了些,那有没有啥办法能加快这一步骤呢?   1.建一张通用的用户表 建用户表没有啥变化,还是和上次一样. USE test; CREATE TABLE `UC_USER` ( `ID` BIGINT (20), `USER_NAME` VARCHAR (400), `U

mysql使用GROUP BY分组实现取前N条记录的方法

MySQL中GROUP BY分组取前N条记录实现 mysql分组,取记录 GROUP BY之后如何取每组的前两位下面我来讲述mysql中GROUP BY分组取前N条记录实现方法. 这是测试表(也不知道怎么想的,当时表名直接敲了个aa,汗~~~~): 结果: 方法一: SELECT a.id,a.SName,a.ClsNo,a.Score FROM aa a LEFT JOIN aa b ON a.ClsNo=b.ClsNo AND a.Score<b.Score group by a.id,a.

在MySQL数据库里用一个SQL语句取得本条记录及其上一条和下一条记录

在做文章页面时,有时候需要在文章下面显示出上一条和下一条记录.如果简单地使用id值加1和减1的方法来做会有缺陷. 各位看官请试想,如果我们删除了中间的某一条和某几条记录呢?那不是取不出来了? 所以,思想是很重要的,嗯.举个例子吧,比如说我有一个名叫XXX的表,里面有唯一的id字段.然后,里面有N条数据呢~~~ 现 在,我们来看看我们的思维.我们是要根据已知ID来找上一条和下一条的,也就是在数据库里相邻的三条记录, 中间那一条是确定的.那既然ID有可能不连续, 那我们就用>和<运算符来吧(要是L

MySQL:如何查询出每个分组中的 top n 条记录?

问题描述 需求: 查询出每月 order_amount(订单金额) 排行前3的记录. 例如对于2019-02,查询结果中就应该是这3条: 解决方法 MySQL 5.7 和 MySQL 8.0 有不同的处理方法. 1. MySQL 5.7 我们先写一个查询语句. 根据 order_date 中的年.月,和order_amount进行降序排列. 然后,添加一个新列:order_amount(本条记录在本月中的名次). 执行结果: 可以看到,根据年.月.订单金额排序了,还多了一列order_rank,

[MySQL] 分组排序取前N条记录以及生成自动数字序列,类似group by后 limit

前言:         同事的业务场景是,按照cid.author分组,再按照id倒叙,取出前2条记录出来.        oracle里面可以通过row_number() OVER (PARTITION BY cid,author ORDER BY id DESC) 表示根据cid,author分组,在分组内部根据id排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的),而mysql数据库就没有这样的统计函数,需要自己写复杂的sql来实现. 1,录入测试数据 USE csd

mysql 批量更新与批量更新多条记录的不同值实现方法

在mysql中批量更新我们可能使用update,replace into来操作,下面来给各位详细介绍mysql 批量更新与性能吧! mysql更新语句很简单,更新一条数据的某个字段,一般这样写: 复制代码代码如下: UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value'; 如果更新同一字段为同一个值,mysql也很简单,修改下where即可: 复制代码代码如下: UPDATE mytable SET myfie

Mysql删除重复记录,保留id最小的一条

mysql 查询重复字段,及删除重复记录的方法MySQL, 数据库, 数据库, 字段, 服务器数据库中有个大表,需要查找其中的名字有重复的记录id,以便比较.如果仅仅是查找数据库中name不重复的字段,很容易:SELECT min(`id`),`name` FROM `table` GROUP BY `name`; 但是这样并不能得到说有重复字段的id值.(只得到了最小的一个id值)查询哪些字段是重复的也容易:SELECT `name`,count(`name`) as count FROM `

MySQL每个分类的前几条记录

MySQL 获取所有分类和每个分类的前几条记录 比如有文章表 Article(Id,Category,InsertDate) 现在要用SQL找出每种类型中时间最新的前N个数据组成的集合 SELECT A1.* FROM Article AS A1 INNER JOIN (SELECT A.Category,A.InsertDate FROM Article AS A LEFT JOIN Article AS B ON A.Category = B.Category AND A.InsertDat