具有两个条件内联SELECT的MySQL查询

具有两个条件内联SELECT的MySQL查询,mysql,Mysql,目标是: 有两个表,一个是校友表,一个是捐款表——每个捐款都与校友的ID有关 获取一份拥有 在该日期内捐款2-3000英镑 范围为2002-10-10和2003-10-10。 结果需要显示校友的姓名、身份证、每个校友的总成绩以及每个校友的总成绩 指定日期范围 尝试: 我得到了一个语法错误,很可能是因为我试图使用两个have 我也意识到你想使用HAVING和groupby,但我不需要做任何分组 我可能可以这样做,但我认为它效率低下,可能需要很长时间 SELECT alumni.alumni_id,

目标是:

有两个表,一个是校友表,一个是捐款表——每个捐款都与校友的ID有关 获取一份拥有 在该日期内捐款2-3000英镑 范围为2002-10-10和2003-10-10。 结果需要显示校友的姓名、身份证、每个校友的总成绩以及每个校友的总成绩 指定日期范围 尝试:

我得到了一个语法错误,很可能是因为我试图使用两个have

我也意识到你想使用HAVING和groupby,但我不需要做任何分组

我可能可以这样做,但我认为它效率低下,可能需要很长时间

SELECT alumni.alumni_id, alumni.alumni_name,
(SELECT SUM(contributed_amt) FROM contribution WHERE contribution.alumni_id = alumni.alumni_id) AS contrib_alltime_total,
(SELECT SUM(contributed_amt) FROM contribution WHERE contribution.alumni_id = alumni.alumni_id AND contribution.date >= 2002-10-10 AND contribution.date <= 2003-10-10) AS contrib_range_total

FROM alumni

WHERE hold_code IS NULL
AND (SELECT SUM(contributed_amt) FROM contribution WHERE contribution.alumni_id = alumni.alumni_id AND contribution.date >= 2002-10-10 AND contribution.date <= 2003-10-10) >= 2000
AND (SELECT SUM(contributed_amt) FROM contribution WHERE contribution.alumni_id = alumni.alumni_id AND contribution.date >= 2002-10-10 AND contribution.date <= 2003-10-10) <= 3000

ORDER BY lname ASC
实现这一目标的最快和最有效的方法是什么?欢迎您提供任何建议,谢谢您的时间

我认为您不可以在没有组的情况下使用HAVE,也可以使用和加入多个HAVE案例

SELECT a.alumni_id, a.alumni_name, 
SUM(c.contributed_amt) AS contrib_alltime_total, 
SUM(c.contributed_amt) AS contrib_range_total

FROM alumni a, contribution c

WHERE a.hold_code IS NULL
AND c.alumni_id = a.alumni_id AND c.date BETWEEN '2002-10-10' AND '2003-10-10'
AND contrib_range_total BETWEEN 2000 AND 3000
ORDER BY lname ASC

你的建议不太管用,所以我修改了它,但我收到一个错误,组函数的使用无效选择a.Alumbers\u id,从贡献中选择SUMcontributed\u amt,其中contribution.Alumbers\u id=a.Alumbers\u id作为contrib\u alltime\u total,SUMc.contributed\u amt作为Contribute\u range\u total来自Alumbers a,捐款c,其中a.hold_代码为空,c.Aluminan_id=a.Aluminam_id,c.contribution_日期介于'2002-10-10'和'2003-10-10'之间,SUMc.Contribute_金额介于2000和3000之间,由a.Aluminam_id由a.lname ASC订购
SELECT a.alumni_id, a.alumni_name, 
SUM(c.contributed_amt) AS contrib_alltime_total, 
SUM(c.contributed_amt) AS contrib_range_total

FROM alumni a, contribution c

WHERE a.hold_code IS NULL
AND c.alumni_id = a.alumni_id AND c.date BETWEEN '2002-10-10' AND '2003-10-10'
AND contrib_range_total BETWEEN 2000 AND 3000
ORDER BY lname ASC
GROUP BY contrib_range_total HAVING contrib_range_total >= 2000 AND contrib_range_total <= 3000
SELECT a.alumni_id,
sum(c.contributed_amt) AS contrib_alltime_total,
sum(case when c.contribution_date BETWEEN '2002-10-10' AND '2003-10-10' then c.contributed_amt else 0 end) AS contrib_range_total
FROM alumni a
INNER JOIN contribution c ON c.alumni_id = a.alumni_id
WHERE a.hold_code IS NULL
GROUP BY a.alumni_id
HAVING contrib_range_total BETWEEN 2000 AND 3000