0

表の概要:

2列

i_trans_to および i_trans_amnt

i_trans_to は ID で構成され、i_trans_amnt はユーザーがアカウントに入金した金額で構成されます

ユーザーはこれらの金額 300,175,75,40,20 のみを入金できます (したがって、i_trans_amnt 列にはこれらの値のみが含まれます)

ユーザーは何度も入金できるため、IDS には複数のエントリが存在する場合があります。

選択するクエリが必要です

1.入金総額が500円以上の全ユーザー

2.これらすべてのユーザーのうち、クエリは、彼が作成したエントリの種類の数を伝える必要があります (例: Rs.300 のエントリが 5 つ、Rs.175 のエントリが 2 つ)。

ユーザーがrs.500を超えて入金しなければならないという制約を除いて、クエリの設計に成功しました。クエリは次のとおりです

    SELECT DISTINCT i_trans_to, 
                SUM( i_trans_amnt ),
                (SELECT COUNT(*) 
                 FROM transac 
                 WHERE i_trans_amnt=300 AND transac.i_trans_to=current.i_trans_to) AS level1,
                 (SELECT COUNT(*) 
                 FROM transac 
                 WHERE i_trans_amnt=175 AND transac.i_trans_to=current.i_trans_to) AS level2,
                 (SELECT COUNT(*) 
                 FROM transac 
                 WHERE i_trans_amnt=75 AND transac.i_trans_to=current.i_trans_to) AS level3,
                 (SELECT COUNT(*) 
                 FROM transac 
                 WHERE i_trans_amnt=40 AND transac.i_trans_to=current.i_trans_to) AS level4,
                 (SELECT COUNT(*) 
                 FROM transac 
                 WHERE i_trans_amnt=40 AND transac.i_trans_to=current.i_trans_to) AS level5,
                 (SELECT COUNT(*) 
                 FROM transac 
                 WHERE i_trans_amnt=20 AND transac.i_trans_to=current.i_trans_to) AS level6
FROM transac as current
WHERE SUM( current.i_trans_amnt )>500
GROUP BY i_trans_to

SUM(i_trans_amnt)> 500 と記述した where 句をクエリの最後に追加しようとしましたが、これによりエラーが発生しました。

助言がありますか?

4

3 に答える 3

0

このクエリは、最初に合計 500 アムント以上の預金があるすべての ID をリストするクエリを作成して作成しました。次に、そのクエリを結合で使用して、それらのみを保持します (他のすべての ID は JOIN 条件を通過しません)。次に、両方の列をグループ化して、各 ID、各金額、預金数を表示できるようにします。

SELECT
  transac.i_trans_to,
  transac.i_trans_amnt,
  COUNT(0) AS number_of_times_amount_was_deposited
FROM
  transac
  JOIN (
    SELECT
      i_trans_to
    FROM
      transac
    GROUP BY
      i_trans_to
    HAVING
      SUM(i_trans_amnt) > 500
  ) AS large_depositors ON transac.i_trans_to = large_depositors.i_trans_to
GROUP BY
  i_trans_to,
  i_trans_amnt
于 2013-08-10T13:07:33.433 に答える
0

WHEREとHAVING を参照してください(この回答については、その投稿でQuassnoiの功績を認めてください) :

WHERE は GROUP BY の前に適用され、HAVING は後に適用されます (また、集計でフィルター処理できます)。

集約関数はSUM()COUNT()あり、行のグループで機能するすべての関数: http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html

于 2013-08-10T13:28:20.443 に答える