1

正常に機能するこのクエリがあります。manager_details と users の 2 つのテーブルからデータを取得します。私が必要としているのは、マネージャーの合計スコアBUT を週 1 から週 7に持ち込むことです。週は、manager_details テーブルの別のフィールドで、0 ~ x の値を持つ可能性があります。

SELECT
  SUM(mng.score) AS accumulated_score,
  mng.manager_id AS manager_id,
  users.id,
  users.fname,
  users.lname
FROM manager_details AS mng
  JOIN users
    ON users.id = mng.manager_id
GROUP BY manager_id
ORDER BY accumulated_score DESC
LIMIT 5

1週目から7週目までのスコアを取得するために、追加しようとしました

SELECT
  SUM(mng.score) AS accumulated_score,
  mng.manager_id AS manager_id,
  users.id,
  users.fname,
  users.lname
FROM manager_details AS mng
WHERE  mng.week >= 1 AND mng.week <= 6    -- this line
  JOIN users
    ON users.id = mng.manager_id
GROUP BY manager_id
ORDER BY accumulated_score DESC
LIMIT 5

そしてこれを手に入れた

エラー コード : 1064 SQL 構文にエラーがあります。near 'join users on users.id = mng.manager_id GROUP BY manager_id を使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

そしてまた試した

     ...         
     HAVING mng.week >= 1 AND mng.week <= 6  -- <-- 
     ...

また、GROUP BY の後、GROUP BY の前、最後に HAVING クラスを配置しましたが、動作しませんでした。mysql エラー チェック構文が取得されました。

私は何か間違ったことをしていますが、それが何であるかわかりません。

では、mng.score をフィルター処理して 1 ~ 7 週の間にあるスコアのみを取得するには、どの句を使用し、その条件をどこに配置すればよいでしょうか?

4

1 に答える 1

2
SELECT
  SUM(mng.score) AS accumulated_score,
  mng.manager_id AS manager_id,
  users.id,
  users.fname,
  users.lname
FROM manager_details AS mng
  JOIN users
    ON users.id = mng.manager_id
WHERE  mng.week >= 1 AND mng.week <= 6  
GROUP BY manager_id
ORDER BY accumulated_score DESC
LIMIT 5
于 2012-11-01T04:01:06.730 に答える