2

我的 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);

问题是我不能 equal SUM(KOSZT),试图保存它们,AS但它也不起作用。

请帮助我,因为它已经毁了我的一天。

提前致谢。

4

4 回答 4

3

要在 SQL 查询中按聚合函数的结果进行过滤,请将比较放在HAVING语句中。

于 2013-05-18T14:44:58.810 回答
0

由于示例查询中的关键字,我假设是 Oracle 或 DB2。

使用 CTE 找到 2 个月的最大值并使用HAVINGfor 条件在某种程度上简化了表达式,这应该(或多或少)满足您的需要;

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)

一个用于测试的 SQLfiddle

于 2013-05-18T15:01:57.357 回答
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)

于 2013-05-18T15:02:22.167 回答
0

试试这个:

SELECT EXTRACT(YEAR FROM DATA_WYP)
       EXTRACT(MONTH FROM DATA_WYP),
       SUM(KOSZT)
WYPOZYCZENIA
GROUP BY EXTRACT(YEAR FROM DATA_WYP)
          EXTRACT(MONTH FROM DATA_WYP)
HAVING Sum(KOSZT)<( SELECT MAX(SUM(KOSZT))
            FROM WYPOZYCZENIA WYPOZYCZENIA
            WHERE EXTRACT(YEAR FROM DATA_WYP)=2006
             EXTRACT(MONTH FROM DATA_WYP) IN ('2','3')
            GROUP BY EXTRACT(MONTH FROM DATA_WYP))

我希望这能解决你的问题。

于 2013-05-19T12:22:08.757 回答