一个查询中多个条件的 SUM 和 COUNT

娜仁海

我是 SQL 的新手。这就是我正在尝试的。

表:h_invoices样品

InvNo (AI) 邀请客户 总投资 InvPayment
18 6750 6750
19 酒吧 3300 3300

表:h_invdetail样品

indID (AI) 无效ID 产品编号 单位费率
18 18 1 3800
19 18 5 2950

我想是的计数ProductAProductB所以基于ProductIDtotalRevenuesum(InvTotal)

我已经尝试过,例如在InvNo - 18 的情况下

SELECT 
    sum(case when h_invdetail.ProductId = 1 then 1 else 0 end) as ProductA,
    sum(case when h_invdetail.ProductId = 6 then 1 else 0 end) as ProductB,
    sum(case when h_invdetail.ProductId = 3 then 1 else 0 end) as ProductC, 
    sum(h_invoices.InvTotal) as REVENUE 
FROM h_invdetail 
LEFT JOIN h_invoices ON h_invdetail.invID = h_invoices.InvNo 
WHERE h_invoices.InvNo = 18

我得到的总和为13500而不是6750这只是例如,我必须获得整个表的收入和产品分布,但我得到了错误的sum(h_invoices.InvTotal). 我错过了什么吗?

浅褐色的

那么您真正需要的是将两个查询合二为一。您获取所有发票总数的第一部分,使其成为仅返回单个记录的子查询。然后是第二个子查询,它只是您的发票 #18,它将返回一条记录,然后从每个记录中提取列。由于每个表中的结果为 1:1,因此您无需显式连接即可

select
      PQ1.Revenue,
      PQ2.ProductA,
      PQ2.ProductB,
      PQ2.ProductC
   from
      ( SELECT sum (i.InvTotal) as Revenue 
           FROM h_invoices i ) PQ1,
      ( select
              sum(case when d.ProductId = 1 then 1 else 0 end) as ProductA,
              sum(case when d.ProductId = 6 then 1 else 0 end) as ProductB,
              sum(case when d.ProductId = 3 then 1 else 0 end) as ProductC
           from h_invdetail d
           WHERE d.InvNo = 18 ) PQ2

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在一个SQL查询中合并两个表中的两列,并合并COUNT和SUM值

优化查询 - 从同一个子查询中选择 COUNT 和 SUM

SQL在一个查询中统一COUNT和SUM

同一查询中COUNT和SUM的SQL难度

Mysql如何在同一个查询中使用SUM和COUNT

使用 Sum() 和 count() 函数的 SQL 查询

MySQL 中 SUM() 和 COUNT() 的区别

具有多个条件和表的 SQL Sum & Count

MySQL在一个选择中在不同的GROUP BY上获得COUNT和SUM

MySQL:Sum()和Count一次查询?

SUM和COUNT在复杂的SQL查询中不起作用

一个查询中的JOIN,GROUP BY,COUNT和CASE

如何对COUNT()和SUM()项使用子查询

如何组合同一个源的“count”和“sum”计算

MySQL 返回求和值和一个虚拟列作为 (count - sum)

同一查询中不同表的MYSQL Sum和Count

在表中查找 NaN 行时 count() 和 sum() 之间的区别

使用 Python 中的两个唯一列对 sum 和 count 进行分组

使用一个查询在 mysql 上进行多个 SUM 和 JOIN

在多个字段SUM和COUNT上使用GROUP BY的Linq查询

Oracle中的SUM(COUNT())

Oracle中的SUM(COUNT(*))

如何使用两个日期和 BETWEEN 更新查询以计算 SUM 或 COUNT?

COUNT 和 MAX/MIN 和 (HAVING?) 在一个查询/ AdventureWorks2017 任务中

在同一个 Mysql 查询中的 MySql GROUP BY 和 SUM() 中

SQL查询未找到SUM和COUNT中的所有行

在 MySQL 中,我们可以使用 COUNT 和 SUM 值使用单个 SELECT 计算另一个输出列中的值吗?

MySQL:当count = sum和group by时选择

Django Count和Sum批注相互干扰