2

SQL クエリに次の問題があります。そのうちの約 15 の実行に成功しましたが、これにはうんざりします。翻訳するのも難しいですが、おそらく理解できるでしょう。

2006 年の 2 月と 3 月の最大の月額より月額の費用額が少なかった月の年月数と 'borrowed-time' の費用額の合計を表示します。

そして、これは私がこれまでに持っているものです(クエリの多くを試したので、クエリのバージョンの1つです)

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たが、どちらも機能しないことです。

それはすでに私の一日を台無しにしたので、私を助けてください.

前もって感謝します。

4

4 に答える 4

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)

SQLフィドル(MySql)

于 2013-05-18T15:02:22.167 に答える
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)

でテストする SQLfiddle

于 2013-05-18T15:01:57.357 に答える