我的SQL查询存在以下问题。我成功地执行了大约15个,但是这个让我生病了。它甚至很难翻译,但你可能会理解。
显示每月总成本低于2006年2月和3月最高成本的月份和月份数量及其“借用时间”的总和。
这就是我到目前为止(查询的一个版本,因为我尝试过很多版本)
SELECT EXTRACT(MONTH FROM DATA_WYP), SUM(KOSZT)
FROM WYPOZYCZENIA
WHERE KOSZT<(SELECT SUM(KOSZT)
FROM WYPOZYCZENIA
WHERE SUM(KOSZT)<(SELECT MAX(SUM(KOSZT))
FROM WYPOZYCZENIA
WHERE EXTRACT(MONTH FROM DATA_WYP)='2' OR
EXTRACT(MONTH FROM DATA_WYP)='3'
GROUP BY EXTRACT(MONTH FROM DATA_WYP)))
GROUP BY EXTRACT(MONTH FROM DATA_WYP);
问题在于我不能等于SUM(KOSZT)
,试图使用AS
保存它们,但它也不起作用。
请帮助我,因为它已经破坏了我的一天。
提前致谢。
答案 0 :(得分:3)
要按SQL查询中的聚合函数的结果进行筛选,请将比较放在HAVING
语句中。
答案 1 :(得分:0)
由于示例查询中的关键字,我假设使用Oracle或DB2。
使用CTE查找2个月的最大值并使用HAVING
条件简化表达式,这应该(或多或少)做你需要的事情;
WITH cte AS (
SELECT SUM(KOSZT) mx FROM WYPOZYCZENIA
WHERE EXTRACT(MONTH FROM DATA_WYP) IN ('2','3')
AND EXTRACT(YEAR FROM DATA_WYP) = '2006'
GROUP BY EXTRACT(MONTH FROM DATA_WYP)
)
SELECT EXTRACT(YEAR FROM DATA_WYP) Year, EXTRACT(MONTH FROM DATA_WYP) Month,
SUM(KOSZT) KOSZT
FROM WYPOZYCZENIA
GROUP BY EXTRACT(Year FROM DATA_WYP), EXTRACT(Month FROM DATA_WYP)
HAVING SUM(KOSZT) < (SELECT MAX(mx) FROM cte)
答案 2 :(得分:0)
你在找这样的东西吗?
SELECT YEAR(data_wyp) year,
MONTH(data_wyp) month,
SUM(koszt) koszt
FROM wypozyczenia
GROUP BY year, month
HAVING koszt < (SELECT SUM(koszt) koszt
FROM wypozyczenia
WHERE MONTH(data_wyp) IN (2, 3)
AND YEAR(data_wyp) = 2006
GROUP BY MONTH(data_wyp)
ORDER BY koszt DESC LIMIT 1)
SQLFiddle (MySql)
答案 3 :(得分:0)
试试这个 - :
SELECT EXTRACT(年数来自DATA_WYP)
摘录(DATA_WYP中的月份),
SUM(KOSZT)
FROM WYPOZYZZENIA
GROUP BY 提取物(年数来自DATA_WYP)
摘录(DATA_WYP中的月份)
HAVING 总和(KOSZT)&lt;( SELECT MAX(SUM(KOSZT))
FROM WYPOZYZZENIA
WHERE EXTRACT(年数来自DATA_WYP)= 2006年
提取(DATA_WYP中的月份)IN('2','3')
GROUP BY EXTRACT(DATA_WYP个月))
我希望这能解决你的问题。