2012-03-02 5 views
0
+---------+-------------------+------+------+ 
| NAME | TITLE    | SIZE | RANK | 
+---------+-------------------+------+------+ 
| A  | Hippo    | H | 1 | 
| A  | Hippo    | M | 1 | 
| A  | Hippo    | H | N/A | 
| A  | Hippo    | H | 1 | 
| A  | Hippo    | H | N/A | 
| B  | Snail    | H | 1 | 
| B  | Snail    | M | 1 | 
| B  | Snail    | L | 1 | 
| C  | Dog    | H | 1 | 
| C  | Dog    | M | 1 | 
+---------+-------------------+------+------+ 

MySQLこのタイプのポイントシステムはどのように処理できますか?正確なデータの

+---------+-------------------+------+------+ 
| A  | Hippo    | H | 1 | 
| A  | Hippo    | M | 1 | 
| A  | Hippo    | H | N/A | 
| A  | Hippo    | H | 1 | 
| A  | Hippo    | H | N/A | 
+---------+-------------------+------+------+ 

ポイント上から引き出され、以下の通りである:

H = 70 points 
M = 20 points 
L = 10 points 
  • カバサイズ列の4 Hを有しています。合計
  • Hしたがって70
  • 4分の70を等しくすることができる= 17.5
  • これは、各単一Hは17.5点のみ有することを意味します。
  • 「ランク」が存在する場合、ポイントが獲得されます。
  • Hippoには2つの「Rank」しかありません。
  • したがって、Hippoは(17.5)x(2)= 35点を得ます。
  • 「サイズ」欄には、Mもあります。
  • したがってM = 20/1 = 20。
  • したがって、ヒッポは20ポイントを獲得します。
  • Hippoには、Lのサイズの列はありません。
  • したがって、得点は得られません。 (Lから)(Mから)(Hから)35 + 20 + 0 = 55

所望の出力を合計

  • +---------+----------+-------+ 
    | NAME | TITLE | SCORE | 
    +---------+----------+-------+ 
    | A  | Hippo | 55 | 
    | B  | Snail | 100 | 
    | C  | Dog  | 90 | 
    +---------+----------+-------+ 
    

    あなたは複雑なスコアリングのこのタイプを行うにはどうすればよいです/ MySQlの可変ハンドリング

  • 答えて

    1

    複雑なサブ選択の後に、あなたが期待している結果は次のとおりです。

    select c.name,c.title,sum(score) from (
    select b.name, b.title, avg_point*needcount as score from (select name, title, size, count(size), (case when size='H' then 70 when size='M' then 20 when size='L' then 10 end)/ count(size) as avg_point from points group by name,title,size) a 
    join 
    (select name, title, size, count(size) as needcount from points where rank group by name, title, size) b 
    on a.name = b.name 
    and a.title = b.title 
    and a.size = b.size) c group by c.name,c.title; 
    
    +0

    アレン - もし私がそれを行うことができるなら、私はあなたに10点を与えるでしょう。 – stackoverflow

    +0

    これは楽しいことでした。 – Allen

    関連する問題