在不将其包含在 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
我有两个表:
公司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