「2 つ以上のテーブルを結合する方法」に関するかなりの量のスレッドを見てきましたが、それらのスレッドのどれも私の問題を解決していないようです。teams
、persons
およびの 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 ;
テーブルにはもっと多くの列がありますが、簡単にするためにそれらを削除しました。
teams
table には次の方法でレコードが含まれます:
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 に多くの変更を加えることを意味します。本当にやりたいのですが、それが最も簡単で最良の選択肢である場合は、そうします。
ありがとう!