2017-09-28 6 views
0

私は現在、どれくらいの金額の合計を表示しているのですか?私がこれから得たいのは、毎年最高の金額を出した月を表示することです。ここで SQLでは、毎年最も高い月を受け取る

SELECT year(paymentDate), month(paymentDate) , SUM(amount) 
FROM classicmodels.payments 
GROUP BY year(paymentDate), month(paymentDate) 
ORDER BY paymentDate ASC; 

img result

答えて

0

は、列の別名ORDER BY <that alias> DESCSUM(Amount)与え、SELECT

TOP(1)を追加し、私は唯一の各年の最高額を得た月を表示するテーブルです
0

これにROW_NUMBERを使用できます。

SELECT y, m, amount 
FROM (
    SELECT YEAR(paymentDate) AS y, MONTH(paymentDate) AS m, 
      amount, 
      ROW_NUMBER() OVER (PARTITION BY YEAR(paymentDate) ORDER BY amount DESC) AS rn 
FROM classicmodels.payments) AS t 
WHERE t.rn = 1 

注:結束の場合、クエリは任意の月を返します。最大金額を持つ月をすべて返却するには、ROW_NUMBERの代わりにRANKを使用します。

+0

どのように私はこれをmysqlで動作させるのですか? – Nagne

+0

これはsql-serverにあるため、OVER句はmysql workbenchでは動作しません。 – Nagne

0

ROW_NUMBER()を使用すると、条件に基づいてレコードごとにシーケンス番号を割り当てて、シーケンス1のレコードを選択できます。 以下のサンプル。

SELECT * 
FROM (
    SELECT year(paymentDate) year_val, month(paymentDate) month_val, SUM(amount) amt_val, 
      ROW_NUMBER() OVER(PARTITION BY year(paymentDate) ORDER BY SUM(amount) DESC) AS ROW_ORDER 
    FROM classicmodels.payments 
    GROUP BY year(paymentDate), month(paymentDate) 
) AS D 
WHERE D.ROW_ORDER = 1 

これを達成するには他にも多くの方法があります。

およびWHERE D.ROW_ORDER = n - 年ごとにn番目に高い値を返します。

+0

どのように私はこれをmysqlのために働かせるのですか? – Nagne

+0

これはsql-serverにあるため、OVER句はmysql workbenchでは動作しません。 – Nagne

+0

この回答を投稿すると、SQL Serverタグがそこにありました。申し訳ありませんが、MySqlでの経験はありません。しかし、あなたはROW_NUMBERに類似したものを試すことができます。例: - https://stackoverflow.com/questions/19589707/how-to-get-rownumber-with-partition-in-mysql –

関連する問題