1

「2 つ以上のテーブルを結合する方法」に関するかなりの量のスレッドを見てきましたが、それらのスレッドのどれも私の問題を解決していないようです。teamspersonsおよびの 3 つのテーブルが あります。payfiles

teams表は次のようになります。

DROP TABLE IF EXISTS `teams`;
CREATE TABLE IF NOT EXISTS `teams` (
 `team_id` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(20) DEFAULT NULL,
 `leader` varchar(32) NOT NULL,
  PRIMARY KEY (`team_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=30;`

personsテーブル:

DROP TABLE IF EXISTS `persons`;
CREATE TABLE IF NOT EXISTS `persons` (
  `team_id` int(2) DEFAULT '0',
  `hash` varchar(32) NOT NULL,
  UNIQUE KEY `hash` (`hash`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

payfilesテーブル:

DROP TABLE IF EXISTS `payfiles`;
CREATE TABLE IF NOT EXISTS `payfiles` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `hash` varchar(32) NOT NULL,
  `deals_passed` int(2) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1298 ;

テーブルにはもっと多くの列がありますが、簡単にするためにそれらを削除しました。

teamstable には次の方法でレコードが含まれます: 1, Team 1,afaf7878af78a 後者はチーム リーダーの一意のハッシュです。

テーブル person には、すべての個人情報と一意のハッシュが含まれています。たとえば、ハッシュがafaf7878af78aチーム 1 のリーダーでもある John Doe です。

テーブルpayfileには「ハッシュ」列もあり、そのテーブルには従業員の小切手を計算するために必要なすべての情報が含まれています。

経営陣は、会社がどれだけ稼いでいるかについての一般的なビジョンを望んでいます。彼らは、各チームがどれだけの収益を上げているかを知りたがっています。

ここで直面している問題は、「チーム」ごとに収益をグループ化しようとすることです

これまでの私の最善の試みはこれです

SELECT hash, SUM(deals_passed) as deals FROM payfiles JOIN persons ON persons.hash = payfiles.hash GROUP BY payfiles.hash

しかし、データベースの構造を変更せずにチームごとの収益の一般的なビジョンを生成するために、データベースを照会する最適化された方法がわかりません。

例: John Doe と Jane Doe は「チーム 1」に属し、それぞれ $500 と $600 を持ち込みました。

次のようなものを生成したい:

「チーム 1 は $1100 をもたらしました」

私の別の方法は、データベースの構造を変更し、payfile テーブルに新しい列を追加することです。そのような列はteam_id簡単にクエリできるようにするためですが、データベースには現在約 10,000 のレコードがあるため、列を考慮していない 10,000 レコードを更新team_idし、GUI に多くの変更を加えることを意味します。本当にやりたいのですが、それが最も簡単で最良の選択肢である場合は、そうします。

ありがとう!

4

2 に答える 2

1
SELECT
    teams.name,
    SUM(payfiles.deals_passed) AS team_deals_passed
FROM payfiles
LEFT JOIN persons USING (hash)
LEFT JOIN teams USING (team_id)
GROUP BY teams.team_id
于 2012-07-18T16:06:15.550 に答える
0

SUM() を使用して合計を取得し、チームに対して GROUP BY を使用してチームごとの合計を取得できます。

于 2012-07-18T16:00:49.523 に答える