0

さまざまなユーザーの委託品のリストを含むテーブルがあります (テーブル名は委託品です)。このテーブルには、PK としての委託 ID (cons_id)、user_id、および日付 (およびその他の詳細) が含まれています。

これらの委託品の詳細を含む別のテーブルがあります (テーブル名は委託品です)。PK として item_id、FK として cons_id、重量、追跡番号、およびその他の貨物の詳細が含まれます。このテーブルには、最初のテーブル (委託) の単一のエントリに関連する同じ外部キーを持つ複数のエントリがあります。

特定のユーザーの最初のテーブル (貨物) のすべてのエントリを、2 番目のテーブルから取得した詳細 (つまり、2 番目のテーブルのエントリである特定の貨物のすべてのアイテムの合計重量など) とともに選択したい.)。

次のmysqlコマンドを使用します。

SELECT a.cons_id, a.user_id, a.date, 
       sum(c.weight) AS weight, sum(c.weight*2) AS amount, 
       count(c.tracking) AS qty 
FROM   `consignments` AS a LEFT JOIN `consignment` AS c 
       ON c.cons_id = a.cons_id WHERE a.user_id = 103

これにより、その特定のユーザーの委託販売テーブルの最初のアイテムのみが返され、残りのエントリは返されません。もちろん、2 番目のテーブルと結合しないと、すべてのエントリが返されます。

合計のような集計が問題であるかどうか、およびそれを正しく行う方法がわかりません。

どんな提案でも大歓迎です。

4

1 に答える 1

0

グループ化を使用:

重み付けの例 (より多くの sum() 項を簡単に追加できます):

SELECT a.cons_id, a.user_id, a.date, sum(c.weight) AS weight
FROM consignment a, consignments c where a.cons_id = c.cons_id 
GROUP BY a.cons_id,a.user_id, a.date;

証拠:

create table consignment ( cons_id integer, user_id integer, date timestamp );
create table consignments ( cons_id integer, item_id integer, weight integer );
insert into consignment values ( 1, 1, now());
insert into consignment values ( 2, 1, now());
insert into consignments values ( 1, 1, 10);
insert into consignments values ( 1, 2, 200);
insert into consignments values ( 2, 1, 12);
insert into consignments values ( 2, 2, 24);

上記のクエリを実行します

 cons_id | user_id |            date            | weight 
---------+---------+----------------------------+--------
       2 |       1 | 2012-11-05 23:20:34.158361 |     36
       1 |       1 | 2012-11-05 23:20:25.535398 |    210
于 2012-11-05T12:59:54.580 に答える