gpt4 book ai didi

sql - 在 WHERE 语句中使用子查询的别名

转载 作者:行者123 更新时间:2023-12-02 17:48:18 25 4
gpt4 key购买 nike

我正在尝试在 WHERE 语句中使用在 SELECT 中创建的别名。它不起作用,我在另一个问题中读到了原因。

如何在不重复子查询的情况下完成这项工作?

SELECT p.PatientID, p.PatientType, p.AccountNumber,
p.FirstName + ' ' + p.LastName PatientFullName,
p.CreatedDate, DATEDIFF(hour, p.CreatedDate, GETDATE()) TotalTime,
(SELECT AVG(BGValue)
FROM BloodGlucose
WHERE PatientID = p.PatientID) AvgBG
FROM Patients p
WHERE AvgBG > 60;

这有效:

SELECT p.PatientID, p.PatientType, p.AccountNumber,
p.FirstName + ' ' + p.LastName PatientFullName, p.CreatedDate,
DATEDIFF(hour, p.CreatedDate, GETDATE()) TotalTime,
(SELECT AVG(BGValue) FROM BloodGlucose WHERE PatientID = p.PatientID) AvgBG
FROM Patients p
WHERE (SELECT AVG(BGValue) FROM BloodGlucose WHERE PatientID = p.PatientID) > 60;

但我不想重复该子查询。我怀疑它的性能很差。

最佳答案

尝试使用派生表。

SELECT p.PatientID, p.PatientType, p.AccountNumber,
p.FirstName + ' ' + p.LastName PatientFullName,
p.CreatedDate, DATEDIFF(hour, p.CreatedDate, GETDATE()) TotalTime,
bg.AvgBG
FROM Patients p
JOIN (SELECT PatientID, AVG(BGValue) AvgBG
FROM BloodGlucose group by PatientID) BG
ON BG.PatientID = p.PatientID
WHERE AvgBG > 60;

派生表在集合中工作,而相关子查询则逐行工作,这就是为什么我的表更快。

关于sql - 在 WHERE 语句中使用子查询的别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11678269/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com