我需要计算同一对卖家和买家之间的总数trading volume.我找不到类似的例子.

|      sales          |      seller      |      buyer      |
|---------------------|------------------|-----------------|               
|      264120         |        101       |       42        | 
|      175887         |         42       |      101        |  

例如,我需要找到'101'和'42'之间的总体积.他们将同时处于卖方和买方的地位.第一行和第二行的销售额将进行汇总.

预期结果是一行中每对的销售额总和:

|      sales          | trading_couple1  | trading_couple2 |
|---------------------|------------------|-----------------|               
|      440,007        |        101       |       42        | 
 

那么,如何使用SQL查询实现这一点呢?提前谢谢.

推荐答案

这里有一个不使用CTE的解决方案.

  • 创建并填充表格
create table if not exists sale(
sales int,
seller int,
buyer int);
insert into sale values
(264120,101,42),
(175887,42,101),
(20,1,2),
(30,1,2),
(40,2,1);
  • 还有这个问题
SELECT SUM(SALES) sales,
CASE WHEN seller<buyer THEN CONCAT(seller,"-",buyer) ELSE CONCAT(buyer,"-",seller) END partners
FROM sale
GROUP BY
CASE WHEN seller<buyer THEN CONCAT(seller,"-",buyer) ELSE CONCAT(buyer,"-",seller) END ;
  • 给出这个输出
sales      partners
90         1-2
444007     42-101

Sql相关问答推荐

在Golang中管理数据库事务的简洁方法

仅 for each 唯一ID返回一个元素,并仅返回最新连接的记录

使用SQL数据库中的现有列派生或修改几个列

如何将不同层次的产品组和规格组合到最深一层?

如何用HeidiSQL在Firebird中设置超时?

在 PostgreSQL 中生成时间序列查询

将 jsonb 数组中的对象取消嵌套到单独的行中

根据时间值提取记录

Postgresql - 如何根据阈值计算累积和

如何计算两个非周期性时间序列+分组的重叠持续时间

汇总具有连续日期范围的行

Postgres存在限制问题「小值」

更新之前如何获得价值

使用 PL/PGSQL 函数 Select 返回多条记录

使用 regexp_replace 替换所有出现的特殊字符

存储过程 - 动态 SQL 中不同列值的计数

连续几天购买的客户

使用标准SQL 触发更新当前日期

当没有任何行存在时,将一个表中的行插入到另一个表中的更好方法

SQL 计数和过滤查询优化