如何对具有多个值的多个列求和

2024-03-10

我正在寻找以下问题的解决方案:

  1. 进入用户表并查找在网站上列出了项目的用户。在这个用户表中,没有关于拍卖的列。相反,它通过键连接到帐户表(在帐户中,此列称为用户)

  2. 从这些 ID(已列出拍卖物品的用户)中,我需要找到他们的帐户余额。这也在账户表中。余额包含在名为 operation_amount 的列中。我还有另一列称为操作类型,它描述用户是否有正余额或负余额。例如,如果操作类型 = 1,则他的余额为负,而如果操作类型 = 2,则他的余额为正。

现在我有另一张桌子叫做tmpinvoice其中有一列称为金额。这显示了用户需要向网站管理员支付多少费用。

鉴于此,我需要计算他总共需要支付多少钱。例如,如果用户有 200 美元的余额,我需要根据operation_type.

所以我想查询 Do this only for record 在哪里

SELECT u.id AS id_user, u.nick,
  CASE ac.operation_type WHEN 1 THEN ac.operation_amount - tm.amount
                         WHEN 2 THEN ac.operation_amount + tm.amount
                                ELSE 'N/A' END AS `fee`                         
FROM auctionbg_search.accounts AS ac    
    LEFT JOIN auctionbg_search.users AS u ON TRUE
        AND u.id = ac.user
    LEFT JOIN auctionbg_search.auctions AS a ON TRUE
        AND a.id = ac.auction
    LEFT JOIN auctionbg_search.tmpinvoice AS tm  ON TRUE    
WHERE TRUE
  AND tm.amount = ac.operation_amount

这是我收到的结果

http://gyazo.com/3d7e7f52ee14d21cc8c8d33b6bbc479a http://gyazo.com/3d7e7f52ee14d21cc8c8d33b6bbc479a

是的,但是这仅计算列中 1 个值的“费用”,如果用户有多个值怎么办

喜欢这个用户:

http://gyazo.com/c3bdb29fa235044ab888dc0385bbcdbd http://gyazo.com/c3bdb29fa235044ab888dc0385bbcdbd

我需要根据给定用户的操作量计算总金额并删除tmpinvoice从该总额中,

我的一个朋友告诉我使用

IF(SUM(ac.operation_amount), IS NULL , 0, sum(ac.operation_amount) 

并用 + 和 - 连接两种情况的 2 个时间帐户(表)

+ 加入 1 次,- 加入 2 次

但我不知道会是什么样子:)


在 SUM 函数中使用 CASE 表达式。

   SELECT u.id AS id_user, u.nick,
     SUM(CASE ac.operation_type WHEN 1 THEN ac.operation_amount - tm.amount У
                                WHEN 2 THEN ac.operation_amount + tm.amount
                                       ELSE 'N/A' END) AS `fee`
    FROM auctionbg_search.accounts AS ac
      LEFT JOIN auctionbg_search.users AS u ON TRUE AND u.id = ac.user 
      LEFT JOIN auctionbg_search.auctions AS a ON TRUE AND a.id = ac.auction
      LEFT JOIN auctionbg_search.tmpinvoice AS tm  ON TRUE  
    WHERE TRUE AND tm.amount = ac.operation_amount
    GROUP BY u.id, u.nick       

请参阅演示SQLFiddle http://sqlfiddle.com/#!2/8f66e/3

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何对具有多个值的多个列求和 的相关文章

  • 给定“java.sql.SQLIntegrityConstraintViolationException”是否可以确定错误的列

    鉴于我有一个类型为 java sql SQLIntegrityConstraintViolationException 的异常 是否可以以编程方式确定错误的列 或多列 我问这个问题是因为我想将错误映射回客户端的数据模型以指示错误的字段 例如
  • MySQL 通过 current_timestamp 选择上个月的数据

    直到今天 当我使用 MySQL 并需要对日期 时间执行操作时 我使用带有 unix 时间戳的 int 列 没有出现任何问题 但今天在阅读了一些指南后 我决定默认使用 current timestamp 测试时间戳列 所以我感兴趣如何按列选择
  • PL/pgSQL SELECT 到数组中

    这是我的函数声明和主体的一部分 CREATE OR REPLACE FUNCTION access update RETURNS void AS DECLARE team ids bigint BEGIN SELECT INTO team
  • MySQL“LIKE”搜索不起作用

    我通过 LOAD DATA INFILE 在 MySQL 中导入了一个 txt 数据库 一切似乎都正常 唯一的问题是 如果我使用以下查询在数据库上搜索记录 SELECT FROM hobby WHERE name LIKE Beading
  • 有没有办法阻止 SQL Express 2008 空闲?

    我使用 SQL Express 2008 作为 Web 应用程序的后端 问题是 Web 应用程序是在工作时间使用的 因此有时在午餐或休息时间 如果 20 分钟内没有用户登录 SQL Express 将进入空闲状态模式并释放其缓存 我知道这一
  • SQL:如何在按部分分组的查询中使用子查询?

    如何在按部分分组的查询中使用子查询 我使用 SQL Server 2008 R2 和 Delphi 2010 我收到此错误 Cannot perform an aggregate function on an expression cont
  • 即使没有结果也返回一个值

    我有这种简单的查询 它返回给定 id 的非空整数字段 SELECT field1 FROM table WHERE id 123 LIMIT 1 问题是如果找不到 id 结果集就是空的 我需要查询始终返回一个值 即使没有结果 我有这个东西工
  • 只获取倒数第二条记录 - mysql-query

    我有一个如下表记录 my table id rating description 1 0 0 bed 2 1 0 good 3 0 0 bed 4 1 0 good 5 0 0 bed 6 0 0 bed 7 0 0 bed 现在我通过评级
  • mysql转储到derby

    我正在使用 derby 在 eclipse 中进行开发 是否可以从 MySQL 转储表并以某种方式将其用于 derby 我知道 ddl 和 dml 对于两个 dbms 来说是不同的 但我正在寻找一种除了转储 导出之外的合适方法 我可以找到两
  • SQL 查询用于计算每个客户的订单数量和总金额

    我有两张桌子Order与列 OrderID OrderDate CID EmployeeID And OrderItem与列 OrderID ItemID Quantity SalePrice 我需要返回客户 ID CID 每个客户的订单数
  • Postgresql 一张表的多个计数

    我想从表中的两列中获得这些列中值的统一计数 例如 两列是 表 报告 type place one home two school three work four cafe five friends six mall one work one
  • 每月获取记录,但如果该月没有记录,则为零

    如果我有以下 SQL 表 Tests id type receiveDate 1 Blood 2012 01 18 2 Blood 2012 01 20 3 Blood 2012 01 18 4 Blood 2012 03 01 5 Blo
  • T-SQL:用最新的非空值替换 NULL 的最佳方法?

    假设我有这张表 id value 1 5 2 4 3 1 4 NULL 5 NULL 6 14 7 NULL 8 0 9 3 10 NULL 我想编写一个查询来替换任何NULL值与表中最后一个不为空的值在那一栏里 我想要这个结果 id va
  • 检查两个“select”是否相等

    有没有办法检查两个 非平凡的 选择是否等效 最初我希望两个选择之间有形式上的等价 但是答案在证明 sql 查询等价性 https stackoverflow com questions 56895 proving sql query equ
  • Reporting Services 在哪里存储其日志文件

    最相关的谷歌结果似乎表明 为了访问日志 我们必须将您自己的日志表部署到数据库并制作报告服务写入它 http technet microsoft com en us library ms157403 aspx 简而言之 Reporting S
  • MySQL中如何声明变量?

    如何在mysql中声明一个变量 以便我的第二个查询可以使用它 我想写一些类似的东西 SET start 1 SET finish 10 SELECT FROM places WHERE place BETWEEN start AND fin
  • JDBC插入实数数组

    我试图将一个真实的数组插入到 postgresql 数组中 该表的定义是 String sqlTable CREATE TABLE IF NOT EXISTS ccmBlock sampleId INTEGER block REAL 插入内
  • 在 jQuery AJAX 成功中从 MySql 获取特定响应

    好吧 我有这个 ajax 代码 它将在 Success 块中返回 MySql 的结果 ajax type POST url index php success function data alert data My Query sql SE
  • 如何从批量数据中的mysql列中删除所有非数字字符

    我想从列中删除所有非数字字符 我的数据库中有大量数据 目前我正在使用以下链接中描述的方法 http venerableagents wordpress com 2011 01 29 mysql numeric functions http
  • 如何在 SEQUELIZE (nodeJS) 中创建触发器?

    我正在尝试使用sequelize 创建一个触发器 主要思想是创建一个实例CONFIG创建后USER USER MODEL module exports function sequelize DataTypes var User sequel

随机推荐