结合两个查询并获得计数的总和
Posted
技术标签:
【中文标题】结合两个查询并获得计数的总和【英文标题】:Combining two queries and getting the sum of count 【发布时间】:2021-04-10 21:24:42 【问题描述】:我有两个不同的查询,每个查询都完成了我需要的一半工作。如何组合它们。
orders 表有orderNumber
和customerNumber
,customers 表有customerNumber
和salesRepEmployeeNumber
,orderdetails 有多个相同的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 个订单包含三个产品)
【问题讨论】:
了解UNION 【参考方案1】: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.id
是orders
表的主键表达式(或任何唯一的非NULL 列/表达式/索引)。
【讨论】:
以上是关于结合两个查询并获得计数的总和的主要内容,如果未能解决你的问题,请参考以下文章