私がこのMySQLテーブルを持っているとしましょう:
id place_id area_mq n
-- -------- ------- --
1 1 50 1
2 2 90 1
3 2 20 1
4 3 10 1
5 3 10 2
6 3 10 3
7 4 20 1
8 4 20 2
9 5 15 1
10 5 25 1
id
は主キーでplace_id
、エリアIDを表し、area_mq
mqで表した場所の表面積です。
私がしなければならないのはarea_mq
、これらのルールの合計を計算するためのコンパクトなクエリを見つけることです。
- 同じに対して等しい場合
n
は、すべてをカウントします(f.ex for = 2、合計で90と20をカウントします)place_id
area_mq
place_id
- 同じに対して異なる場合
n
は、 1回だけカウントします(これらの種類の「場所」の場合、値は同じになるため、実行できます。たとえば、= 4、2つの20があり、合計は20で40ではありません) 。place_id
area_mq
place_id
この例では、正しい合計は50 +(90 + 20)+ 10 + 20 +(15 + 25)になります。
クエリ(コードやプロシージャなし)でこれを達成できますか?nの要件を逆にすると、GROUP BYとサブクエリを使用するだけで簡単になります...しかし、これらの条件では、行き詰まります。