2

(IDを使用して)3つのテーブルを正常にマージしましたが、4番目のテーブルを追加しようとすると、出力が完全に台無しになります(値が非現実的/間違ったものになります)ので、この4番目のテーブルがグループ化されていないIDなので、この新しいテーブルに参加する前にグループ化する必要があります。現在、クエリは次のとおりです。

SELECT name, SUM(money) AS MONEY
FROM transactions
JOIN results ON transactions.id = results.id
JOIN more ON results.per_id = more.per_id
GROUP BY name
HAVING SUM(money)>500

そして私が新しいテーブルに参加するとき:

SELECT name, SUM(money) AS MONEY, SUM(data_from_NT1), SUM(data_from_NT2)
FROM transactions
JOIN results ON transactions.id = results.id
JOIN more ON results.per_id = more.per_id

JOIN newtable ON results.per_id = newtable.per_id

GROUP BY name
HAVING SUM(money)>500

コマンドGROUPBYper_idを実行することは可能ですか?

(JOIN newtable ON results.per_id = newtable.per_id GROUP BY per_id)

この新しいテーブルをメインテーブルに追加する前に?上からの線は機能しません。

4

2 に答える 2

1

はい、可能ですが、SELECTとして記述する必要があります。これは可能な答えの最初のバージョンです:

SELECT name,
       SUM(money)             AS money,
       SUM(nt2.data_from_NT1) AS data_from_NT1,
       SUM(nt2.data_from_NT2) AS data_from_NT2
  FROM transactions AS t
  JOIN results      AS r ON t.id = r.id
  JOIN more         AS m ON r.per_id = m.per_id
  JOIN (SELECT per_id, SUM(data_from_NT1) AS data_from_NT1, SUM(data_from_NT2) AS data_from_NT2
          FROM newtable GROUP BY per_id
       ) AS nt2 ON results.per_id = nt2.per_id
 GROUP BY name
HAVING SUM(money) > 500;

メインの選択リストに「SUMの合計」が必要かどうかは完全には明らかではありません。あなたはおそらくそうではありません。また、nameまたはmoney列がどこから来ているのかも明確ではありません。通常は、適切なテーブルエイリアスをプレフィックスとして付けます。これらの警告があると、これはあなたが求めているものにもっと近いかもしれません:

SELECT name, SUM(money) AS MONEY, nt2.data_from_NT1, nt2.data_from_NT2
  FROM transactions AS t
  JOIN results      AS r ON t.id = r.id
  JOIN more         AS m ON r.per_id = m.per_id
  JOIN (SELECT per_id, SUM(data_from_NT1) AS data_from_NT1, SUM(data_from_NT2) AS data_from_NT2
          FROM newtable GROUP BY per_id
       ) AS nt2 ON results.per_id = nt2.per_id
 GROUP BY name, nt2.data_from_NT1, nt2.data_from_NT2
HAVING SUM(money) > 500;

これを書く方法は間違いなく他にもあります。メインクエリでのグループ化は、メインクエリに単純な直接結合を残して、並列サブクエリに入れる方がよい場合があります。しかし、実際にそれを行うための情報はありません。

于 2012-04-07T19:22:50.610 に答える
1

group byをサブクエリに移動できます。

join   (
       select  per_id
       ,       sum(col1) as col1_avg
       ,       avg(col2) as col2_avg
       from    newtable 
       group by
               per_id
       ) as newtable
on     results.per_id = newtable.per_id

でグループ化する場合per_id、他の列を集約する必要があります。

于 2012-04-07T19:16:49.973 に答える