[英]MySQL how can I achieve this query?
我有以下模拟表:
+---------+-------------------+------+------+
| NAME | TITLE | SIZE | Hit |
+---------+-------------------+------+------+
| A | Hippo1 | H | 0 |
| A | Hippo2 | H | 0 |
| A | Hippo3 | H | 1 |
| A | Hippo1 | M | 0 |
| A | Hippo2 | M | 1 |
| A | Hippo3 | M | 1 |
| A | Hippo1 | L | 0 |
| A | Hippo2 | L | 1 |
| A | Hippo3 | L | 1 |
+---------+-------------------+------+------+
| B | Snail1 | H | 1 |
| B | Snail1 | M | 0 |
| B | Snail1 | L | 1 |
+---------+-------------------+------+------+
| C | Dog | H | 1 |
| C | Dog | M | 0 |
+---------+-------------------+------+------+
| D | Sheep | H | 0 |
| D | Sheep | L | 1 |
+---------+-------------------+------+------+
| E | Fish | H | 1 |
| E | Fish | H | 1 |
+---------+-------------------+------+------+
我想要的结果会
+---------+----------+-------+
| NAME | TITLE | SCORE |
+---------+----------+-------+
| A | Hippo | 100 |
| B | Snail | 80 |
| C | Dog | 80 |
| D | Sheep | 10 |
| E | Fish | 100 |
+---------+----------+-------+
所需的计算:
所有独特的情况都是
说明:
Hippo Has case {H,M,L}
Snail has case {H,M,L}
Dog has case {H,M}
Sheep has case {H,L}
Fish has case {H}
进一步说明
河马:尽管并非所有规模的人都能受命,但河马之所以能获得100分,是因为每个案例至少有1个满足了要求。 因此, HIPPO3满足了所有三个H
M
L
要求,因此可以考虑发现河马 100%
从上面提取(行是查看器的逻辑构造)
| A | Hippo1 | H | 0 |
| A | Hippo2 | H | 0 |
| A | Hippo3 | H | 1 | <--Here
+-------------------------------------------+
| A | Hippo1 | M | 0 |
| A | Hippo2 | M | 1 |
| A | Hippo3 | M | 1 | <--Here
+-------------------------------------------+
| A | Hippo1 | L | 0 |
| A | Hippo2 | L | 1 |
| A | Hippo3 | L | 1 | <--Here
干得好:
select name, sum(FinalVal) Score from (
select distinct t.name,
case
when size = 'H' then Hval
when size = 'M' then Mval
else Lval
end FinalVal
from (
select name,
case
when sizes = 'H,L,M' then 70
when sizes = 'H,M' then 80
when sizes = 'H,L' then 90
when sizes = 'H' then 100
else 0
end Hval,
case
when sizes = 'H,L,M' then 20
when sizes = 'H,M' then 20
when sizes = 'L,M' then 60
when sizes = 'M' then 100
else 0
end Mval,
case
when sizes = 'H,L,M' then 10
when sizes = 'L,M' then 40
when sizes = 'H,L' then 10
when sizes = 'L' then 100
else 0
end Lval
from (
select name, group_concat(distinct size order by size) sizes from t
group by name
) s1
) s2
join t on t.name = s2.name
where hit
) final
group by name
尚不清楚如何根据您的数据获取标题(实际上,结果中包含的数据不存在于原始表中,例如Hippo
而不是Hippo1
,但我将留给您。
这将导致:
+------+-------+
| NAME | SCORE |
+------+-------+
| A | 100 |
| B | 80 |
| C | 80 |
| D | 10 |
| E | 100 |
+------+-------+
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.