在不将其包含在 GROUP BY 子句中的情况下选择描述字段时 GROUP BY id 的最佳方法

Best way to GROUP BY id while SELECTing a description field without including it in the GROUP BY clause

我有两个表:

公司Table

Id,
CompanyName

促销 Table:

Id,
CompanyId,
Date,
Value

我需要按日期和公司对销售额进行分组并像这样显示:

CompanyId  CompanyName           Date        Value
---------  --------------------  ----------  --------
        1  Company 1             2021-10-01  2832.98
        2  Company 2             2021-10-01  8112.81
        1  Company 1             2021-10-02  2182.12
        2  Company 2             2021-10-02  3521.11

我知道我可以用这个轻松实现它

SELECT s.CompanyId, c.CompanyName, s.Date, SUM(s.Value) FROM Sale s
JOIN Company c on s.CompanyId = c.Id
GROUP BY s.Date, s.CompanyId, c.CompanyName

问题是,当我在 GROUP BY 子句中包含 CompanyName 时,它会慢一个数量级。我也许可以通过添加新索引来规避它,但现在还不行。

我能够使用此查询运行更快

SELECT 
    s.CompanyId, 
    (SELECT CompanyName FROM Company WHERE Id = s.CompanyId) as CompanyName
    s.Date, 
    SUM(s.Value) 
FROM Sale s
GROUP BY s.Date, s.CompanyId

但是我想知道是否有faster/better方法。 2 秒内没有 CompanyName 运行s 的分组,如果我将 CompanyName 添加到 GROUP BY,它会增加 20 秒的查询时间。使用我列出的最后一个查询,它 运行s 在大约 5 秒内。

将名称查找推迟到分组之后? 未测试...

select i.CompanyId,c.CompanyName,i.Date,i.Value
From Company c join(
SELECT 
    s.CompanyId, 
    s.Date, 
    SUM(s.Value) as [Value]
FROM Sale s
GROUP BY s.Date, s.CompanyId) i
on i.CompanyId = c.CompanyId