【问题标题】:MySQL how would I handle this type of point system?MySQL 我将如何处理这种类型的积分系统?
【发布时间】:2012-03-02 00:31:07
【问题描述】:
+---------+-------------------+------+------+
| 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   |
+---------+-------------------+------+------+

从上面提取的确切数据示例

+---------+-------------------+------+------+
| 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
  • Hippo 在 size 列中有 4 个H
  • H 总共可以等于 70。
  • 因此 70/4 = 17.5
  • 这意味着每个H只能有17.5分。
  • 如果存在“等级”,则会获得积分。
  • Hippo 只有两个“等级”。
  • 因此 Hippo 获得 (17.5)x(2)=35 分。
  • Hippo 在“大小”列中也有一个M
  • 因此M = 20/1 =20。
  • 因此河马获得20分。
  • Hippo 在 size 列中没有 L
  • 因此没有获得积分。
  • 总计 35(来自 H)+ 20(来自 M)+ 0(来自 L)= 55。

期望的输出

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

你如何在 MySQl 中进行这种复杂的评分/变量处理

【问题讨论】:

    标签: 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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-15
      • 1970-01-01
      • 2011-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多