MySQL, как я могу достичь этого запроса? - PullRequest
1 голос
/ 22 марта 2012

У меня есть следующая таблица макетов:

+---------+-------------------+------+------+
| 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  |
+---------+----------+-------+

Требуются вычисления:

  • Тип может иметь не более трех значений: {H, M, L};
  • Когда присутствуют все значения, они классифицируются следующим образом: H = 70M = 20 L = 10
  • ВСЕ уникальные чемоданы

    1. Корпус {H, M}: H = 80 M = 20
    2. Корпус {M, L}: M = 60 L = 40
    3. Корпус {H, L}: H = 90 L = 10
    4. Корпус {H}: H = 100
    5. Корпус{M}: M = 100
    6. Корпус {L}: L = 100
    7. Корпус {H, M, L}: H = 70 M = 20 L = 10

Объяснение:

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 satsified, так что hippo можно считать найденным на 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

1 Ответ

1 голос
/ 22 марта 2012

Вот, пожалуйста:

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 |
+------+-------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...