0

質問に対する答えを見つけるために投稿をふるいにかけましたが、運がありませんでした。そこで、新しいものを作成して、コミュニティが私を助けてくれるかどうか見てみようと思いました! 物事を説明する際に正しい SQL 用語を使用していない場合は、ご容赦ください。

この問題では 3 つのテーブル。テーブル A は、依存関係のない「メイン」テーブルです。テーブル B には、テーブル A への外部キー参照があります。テーブル C には、テーブル B への外部キー参照があります。

このクエリには 2 つの目標があります。最初に、テーブル C のフィールド、たとえばフィールド C を合計します。満たさなければならない唯一の条件は、A のフィールド、たとえばフィールド A、たとえば X と等しくなければなりません。公平を期すために、このソリューションは単純です。 :

SELECT Sum(C.fieldC) FROM C
  INNER JOIN B
    ON C.foreign_keyB = B.id
  INNER JOIN A
    ON B.foreign_keyA = A.id
  WHERE fieldA = X

さて、2 番目の目標: テーブル A で見つかった、fieldA = X に一致する行の数を数えたいと思います。私はこれを試しました:

SELECT Sum(C.fieldC), Count(A.id) FROM C
  INNER JOIN B
    ON C.foreign_keyB = B.id
  INNER JOIN A
    ON B.foreign_keyA = A.id
  WHERE fieldA = X

しかし、私はかなり離れた合計を得ています。私がここで犯している明らかな間違いはありますか?みんな助けてくれてありがとう!=)

4

1 に答える 1

1

この場合、次を使用して問題を修正できますcount distinct

SELECT Sum(C.fieldC), Count(distinct A.id)
FROM C
  INNER JOIN B
    ON C.foreign_keyB = B.id
  INNER JOIN A
    ON B.foreign_keyA = A.id
  WHERE fieldA = X

平均値や合計など、Aのフィールドに対して他の操作を実行する場合、ソリューションはもう少し複雑になります。

于 2012-12-18T15:37:25.510 に答える