SQL:如何返回一个列,该列是另一列上返回的行的集合?
我有一张公司和发票的表格。我的查询将每个公司发票的总值相加,以提供公司的“总销售额”。我想返回的是与同一查询中的其他公司相比,每个公司销售额的+/-SQL:如何返回一个列,该列是另一列上返回的行的集合?,sql,Sql,我有一张公司和发票的表格。我的查询将每个公司发票的总值相加,以提供公司的“总销售额”。我想返回的是与同一查询中的其他公司相比,每个公司销售额的+/- Select Company.name, sum(Invoice.total) as InvoiceTotal From Company Inner Join Invoice on Invoice.CompanyId = Company.Id Group By Company.name 假设上述查询生成: Company Inv
Select Company.name, sum(Invoice.total) as InvoiceTotal
From Company
Inner Join Invoice on Invoice.CompanyId = Company.Id
Group By Company.name
假设上述查询生成:
Company InvoiceTotal
A 100
B 200
C 600
我希望附加列提供超过或低于InvoiceTotal列平均值的金额:
Company InvoiceTotal Difference
A 100 -200
B 200 -100
C 600 300
如何在单个查询中提取该值?如果您的数据库可以处理窗口平均值(大多数都可以),则可以使用应用于发票总额的窗口平均值函数,然后使用发票总额执行其余操作 这是SQL Server的一个示例:
;WITH Data AS
(
SELECT
*
FROM
(
VALUES
('a', 50),
('a', 25),
('a', 25),
('b', 125),
('b', 75),
('c', 275),
('c', 50),
('c', 75),
('c', 200)) V(Company, Invoice)
)
SELECT
Company = V.Company,
Invoice = SUM(V.Invoice),
AverageAcrossAllCompanies = AVG(SUM(V.Invoice)) OVER (),
AverageInvoiceDifference = SUM(V.Invoice) - AVG(SUM(V.Invoice)) OVER ()
FROM
Data AS V
GROUP BY
V.Company
结果:
Company Invoice AverageAcrossAllCompanies AverageInvoiceDifference
a 100 300 -200
b 200 300 -100
c 600 300 300
假设您的数据库支持CTE
with total as (
select avg(invoicetotal) totalsum
from table_name)
select t.company,
t.invoicetotal,
t.invoicetotal - total.totalsum
from table_name t, total
Company INVOICETOTAL T.INVOICETOTAL-TOTAL.TOTALSUM
A 100 -200
B 200 -100
C 600 300
这里有另一种方法可以得到你想要的方差
Select
name,
InvoiceTotal,
InvoiceTotal - avg(InvoiceTotal) as Difference
From
(Select Company.name, sum(Invoice.total) as InvoiceTotal
From Company
Inner Join Invoice on Invoice.CompanyId = Company.Id
Group By Company.name)
group by name, InvoiceTotal
可通过以下查询获得结果:
Select Company.company, sum(Invoice.total) as InvoiceTotal, (SELECT AVG(Invoice.total) FROM Invoice) AS InvoiceAvg,(SELECT AVG(Invoice.total) FROM Invoice) -sum(Invoice.total) AS Difference
From Company
Inner Join Invoice on Invoice.CompanyId = Company.Id
Group By Company.company
您正在使用哪个数据库管理系统?@Tanner Snowflake