0

データベース: mysql>ver 5.0

table 1: type_id (int), type
table 2: name_id, name, is_same_as = table2.name_id or NULL
table 3: id, table2.name_id, table1.type_id, value (float)

値を合計したいのですが、 where の値をカウントし、wheretable 3table2.name_id値も含めます。のすべての値に対してすべてのデータを選択したい。idis_same_is=name_idtable3table2

私の質問があまり明確でない場合や、すでに回答されているのに適切な回答が見つからない場合は、お詫び申し上げます。または、何を探すべきか正確にわかりません。

[data]. table1
id | type
=========
1  | test1
2  | test2

[data].table2
name_id  |  name  | is_same_as
==============================
1        |  tb_1  | NULL
2        |  tb_2  | 1
3        |  tb_3  | NULL
4        |  tb_4  | 1

[data].table3
id    |   name_id  |  type_id | value
======================================
1     |   1        |  1       | 1.5
2     |   2        |  1       | 0.5
3     |   2        |  2       | 1.0


output:
name_id| type_id|SUM(value)
=======================================================
1      | 1      |2.0  < because in table2, is_same_as = 1
2      | 2      |1.0
4

2 に答える 2

0

これはあなたが探しているものかもしれません: (MySQL でテストしていないので、タイプミスがあるかもしれません)

with combined_names_tab (name_id, name_id_ref) as
(
select name_id, name_id from table2
union select t2a.name_id, t2b.name_id
  from table2 t2a 
  join table2 t2b 
    on (t2a.name_id = t2b.is_same_as)
)
select cnt.name_id, t3.type_id, sum(t3.value) sum_val
  from combined_names_tab cnt
  join table3 t3
    on ( cnt.name_id_ref = t3.name_id )
 group by cnt.name_id, t3.type_id
having sum(t3.value) / count(t3.value) >= 3

クエリの内容は次のとおりです。

まず、「is_same_as」列を使用して GROUP BY するすべての table2 行の結合である「combined_names_tab」を作成して、その決定を行います。UNION を実行して、必ず「親」行を含めます。

次に、上記の行を取得したら、GROUP BY と SUM を使用して table3 に単純に結合します。

注:table1は不要でした(私は信じています)。

これがうまくいくかどうか教えてください!

ジョン...

于 2012-10-05T21:30:29.650 に答える
0

私はあなたが望むことを次のようにすると思います:

select coalesce(t2.is_same_as, t2.name_id) as name_id, t3.type_id, sum(value)
from table_3 t3 join
     table_2 t2
     on t3.name_id = t2.name_id
group by coalesce(t2.is_same_as, t2.name_id), t3.type_id
order by 1, 2

のテーブルに参加しますname_id。ただし、is_same_as列が存在する場合は列を使用し、存在しname_idない場合は列を使用してデータを要約します。

于 2012-10-05T21:28:21.653 に答える