繁体   English   中英

结合两个查询并获得计数的总和

[英]Combining two queries and getting the sum of count

我有两个不同的查询,每个查询都完成了我需要的一半工作。 如何将它们结合起来。

orders 表有orderNumbercustomerNumbercustomers表有customerNumbersalesRepEmployeeNumberorderdetails有多行相同的orderNumber ,每行显示不同商品的价格和数量)。

(计算每个销售代表拥有的不同客户的订单数量)

select c.salesRepEmployeeNumber, count(*)
from customers c
inner join orders o1
on c.customerNumber = o1.customerNumber
group by c.salesRepEmployeeNumber;

(计算每个销售代表的收入)

select c.salesRepEmployeeNumber, sum(o2.priceEach*o2.quantityOrdered) as "Revenue"
from customers c
inner join orders o1
on c.customerNumber = o1.customerNumber
inner join orderdetails o2
on o1.orderNumber = o2.orderNumber
group by c.salesRepEmployeeNumber;

我需要一个查询来了解员工编号、订单数量和收入。 我试过了

select sum(o2.priceEach*o2.quantityOrdered) as "Revenue", c.salesRepEmployeeNumber, count(*)
from customers c
inner join orders o1
on c.customerNumber = o1.customerNumber
inner join orderdetails o2
on o1.orderNumber = o2.orderNumber
group by c.salesRepEmployeeNumber;

但它会从订单中返回商品/产品的数量(例如,1 个订单有 3 个产品)

SELECT salesRepEmployeeNumber,
       t1.`count(*)` AS `count`,
       t2.Revenue
FROM (complete text of 1st query) AS t1
LEFT JOIN (complete text of 2nd query) AS t2 USING (salesRepEmployeeNumber)

完整的文本意味着“没有最后的分号”。

如果您的数据保证第二个查询产生的行数等于第一个查询产生的行数,那么您可以不使用 LEFT 而是使用 INNER 连接。


还要测试

select c.salesRepEmployeeNumber
     , COUNT(DISTINCT o1.id) AS orders_count
     , sum(o2.priceEach*o2.quantityOrdered) as "Revenue"
  from customers c
  join orders o1
    on c.customerNumber = o1.customerNumber
  join orderdetails o2
    on o1.orderNumber = o2.orderNumber
 group 
    by c.salesRepEmployeeNumber;

其中o1.idorders表的主键表达式(或任何唯一的非 NULL 列/表达式/索引)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM