0

2 つの変数を含む単一の列を同じインデックスを持つ 2 つの列にピボット/再編成し、これらの変数の差を計算したいと考えています。

以下の表の定義は、2 つの異なる dataTypes がカテゴリ、countryID、および year によって識別されることを示しています。

CREATE  TABLE IF NOT EXISTS Data (
  dataID INT PRIMARY KEY AUTO_INCREMENT ,
  category INT NOT NULL REFERENCES Categories (Category),
  dataType INT NOT NULL,
  countryID INT NOT NULL REFERENCES Countries (countryID),
  year INT NOT NULL,
  values DEC(20,2) NULL);

目標は、次の表に到達することです。

CREATE  TABLE IF NOT EXISTS Data (
  dataID INT PRIMARY KEY AUTO_INCREMENT ,
  category INT NOT NULL REFERENCES Categories (Category),
  countryID INT NOT NULL REFERENCES Countries (countryID),
  year INT NOT NULL,
  dataType1values DEC(20,2) NULL),
  dataType2values DEC(20,2) NULL),
  type1-type2values DEC(20,2) NULL);

100 以上の国、25 年、5000 以上のカテゴリがあります。かなりの調査にもかかわらず、(明らかに) 必要な自己結合を実装する効率的な方法に苦労しています。ご不明な点がございましたら、お知らせください。ありがとう!

4

1 に答える 1

1

これは、すべてのカテゴリ/郡/年にタイプ 1 とタイプ 2 の両方の値があることを前提としています。両方を持たない行を処理する必要がある場合は、さらに複雑になります (特に MySQL には がないためCROSS JOIN)。

create table NewData (<column definitions>)
select d1.category, d1.countryID, d1.year,
       d1.values as dataType1values, d2.values as dataType2values,
       d1.values-d2.values as values_diff,
       NULL dataID /* to allow auto-increment */
from Data d1
join Data d2 USING (category, countryID, year)
where d1.dataType = 1
and d2.dataType = 2
于 2013-06-26T23:14:03.923 に答える