MySQL我将如何处理这种类型的点系统?
从上面提取的精确数据示例MySQL我将如何处理这种类型的点系统?,mysql,Mysql,从上面提取的精确数据示例 +---------+-------------------+------+------+ | NAME | TITLE | SIZE | RANK | +---------+-------------------+------+------+ | A | Hippo | H | 1 | | A | Hippo | M | 1 | | A
+---------+-------------------+------+------+
| 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 |
+---------+-------------------+------+------+
- 河马在尺寸栏中有4个
H
总计可以等于70李>H
- 因此,70/4=17.5
- 这意味着每个
只能得到17.5分李>H
- 如果存在“等级”,则获得分数李>
- 河马现在只有两个“等级”
- 因此河马获得(17.5)x(2)=35分
- Hippo在“尺寸”栏中还有一个
李>M
- 因此
=20/1=20M
- 因此河马获得20分李>
- 河马在尺寸栏中没有
L
- 因此没有得分
- 总共35(从
)+20(从H
)+0(从M
)=55L
H = 70 points
M = 20 points
L = 10 points
在复杂的子选择和联接之后,如何在MySQl中进行这种复杂的评分/变量处理,下面是您期望的结果:
+---------+----------+-------+
| NAME | TITLE | SCORE |
+---------+----------+-------+
| A | Hippo | 55 |
| B | Snail | 100 |
| C | Dog | 90 |
+---------+----------+-------+
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;