1

私は、うまくいけば各テーブルの小計を合計するmySQLクエリに取り組んでいます。

メンバー用のテーブルが 1 つあります。これには、名前、一意の ID、およびその他のいくつかの無関係なアイテムがあります。もう 1 つのテーブルは、ログに記録されたコミュニティ サービスを追跡するためのものです。各メンバーは複数回参加できます。フィールドは、uniqueID (メンバーへの外部キー)、auto_increment (プライマリの場合)、期間、時間数、および場所です。

このクエリで実行したいのは、特定の期間の各メンバーの時間の合計を追加することです。私が持っているものは以下のとおりですが、残念ながら、各メンバーの合計で最初のメンバーしか得られません。何か案は?

SELECT fName, lName, SUM(hours)
FROM members M, communityService S
WHERE S.term = 'f2012' && M.onid = S.member
4

2 に答える 2

1

GROUP BYあたりの合計を集計する句がありませんfName,lName:

SELECT fName, lName, SUM(hours)
FROM members M, communityService S
WHERE S.term = 'f2012' && M.onid = S.member
GROUP BY lName, fName

MySQL 以外のほとんどの RDBMS は、クエリで構文エラーを報告しますが、MySQL には、一致する行を非決定論的に選択して、集計に表示されない残りの列を埋めるという独自のデフォルト動作があります。GROUP BY句。そのため、最初の行のlName, fName.

集計関数とGROUP BYに関するドキュメントを確認してください。

INNER JOIN暗黙的 (コンマ区切り) の代わりに明示的を使用することをお勧めしますFROM

SELECT
  fName,
  lName,
  SUM(hours) AS total_hours
FROM 
  members M, 
  INNER JOIN communityService S M.onid = S.member
WHERE 
  S.term = 'f2012' 
GROUP BY lName, fName
于 2012-11-19T02:15:59.720 に答える
1

group byたとえば、句が必要です

SELECT fName, lName, SUM(hours)
FROM members
INNER JOIN communityService ON communityService.member = members.onid
WHERE communityService.term = 'f2012'
GROUP BY fName, lName   <--- modify as desired for your requirements.

最新の結合構文を使用して書き直したことに注意してください。サーバーに「問題」はありませんが、ガベージ ヘッドに「遅延」結合構文を残すことをお勧めします。

于 2012-11-19T02:16:06.740 に答える