0

私は3つのテーブルt1、t2、t3を持っています。T3 は t2 と関係があり、t2 は t1 と関係があります。私はこれを選択しています

select t1.id,sum(t3.column)
from 
    t1 
    join t2 on t2.fk = t1.id 
    join t3 on t3.fk = t2.id
where t1.column = 'something'
group by t1.id,t3.fk;

グループ化せずに選択すると、120行あります。と

group by t3.fk 

5行あります。と

group by t1.id it have 1 row

これはまだ大丈夫です。しかし、私が持っている場合

group by t3.fk,t1.id

5行あります。私は1行だけを期待していました。サンプルデータ:

t1.id    |t1.some_column
5        |"some data"

t2.id    |t2.fk    |t2.some_column
1        |5        |"a"
2        |5        |"b"
3        |5        |"c"
4        |5        |"d"
5        |5        |"e"

t3.id    |t3.fk    |t3.column
1        |1        |1
......................
24       |2        |1
......................
48       |3        |1
......................
72       |3        |1
......................
96       |3        |1
......................

リターンを選択:

t1.id    |sum(t3.column)
5        |24
5        |24
5        |24
5        |24
5        |24

t1.id でグループ化すると、同じ t1.id の行が 5 つある理由がわかりません。1行しか返さない場合、合計に関する情報が失われることはわかっていますが、selectで合計なしでもこれを行います。この選択がばかげていて意味がないことはわかっていますが、理解を深めるのに役立つかもしれません。

4

1 に答える 1

1

結果が意味をなさないので、あなたは十分な情報を提供していないと思います.

  • group by t2.fk5 行を返す は、5 つの異なるt2.fk値があることを意味します
  • group by t1.idt1.id1 行を返します。これは、diffednt値が 1 つしかないことを意味します。
  • on に参加しているためt2.fk = t1.id、異なる値のt2.fk数と異なる値の数がt1.id同じである必要があり、以前の結果と矛盾します。

申し訳ありませんが、あなたは正しいです。t2.fk ではなく t3.fk である必要があります。私はそれを編集し、いくつかのデータを追加します。– コクミス

わかりにくいことはありません。t3.fk[1, 2, 3, 4, 5] などの 5 つの一意の値と、[1] などの 1 つの一意の値があるとしt1.idます。 の組み合わせはt3.fk, t1.id、[(1, 1)、 (2, 1), (3, 1), (4, 1), (5, 1)]. したがって、5行を返すことは期待どおりです。

于 2013-06-12T15:38:06.267 に答える