2012-07-08 3 views
1

Я хотел бы создать представление из таблицы, как это:MySQL сложный Вложенный запрос создания представления

Configuration | Size | Runtime  
0    | 10 | 32.5  
1    | 10 | 30.8 
2    | 10 | 40.1  
0    | 20 | 61.0 
1    | 20 | 65.3 
2    | 20 | 56.8 

Где конфигурация номер 0 специальный (это настройка по умолчанию), и это присутствует в каждом группа значений «Размер». Моя цель состоит в том, чтобы создать представление, как это:

Configuration | Size | Speedup 
0    | 10 | 1.0 
1    | 10 | 1.05 
2    | 10 | 0.81 
0    | 20 | 1.0 
1    | 20 | 0.93 
2    | 20 | 1.07 

Для каждой группы строк с одинаковым размером, я хотел бы найти конфигурацию по умолчанию (идентифицируется номером 0), а затем вычислить соотношение между временем выполнения рассматриваемой строки и времени выполнения по умолчанию.

Это может быть разбит на два запроса:

  1. ищет выполнения по умолчанию для данного «Размер»
  2. выполняют соотношение между средой выполнения и по умолчанию.

Проблема в том, что в запросе номер 1 (это должен быть подзапрос в предложении выбора запроса 2). Я не знаю, какой «размер», который я сейчас рассматриваю. Надеюсь, вы понимаете, что я имею в виду.

У меня там проблема вокруг этой проблемы?

ответ

2

Другой подход можно использовать это подзапрос:

CREATE VIEW yourview AS 
SELECT 
    Configuration, 
    Size, 
    (SELECT Runtime 
    FROM yourtable AS T2 
    WHERE T1.Size = T2.Size 
    AND T2.Configuration = 0)/Runtime AS SpeedUp 
FROM yourtable AS T1 

Смотреть это работает онлайн: sqlfiddle

+0

Круто, спасибо большое! –

2
SELECT Configuration, Size, default.Runtime/t.Runtime AS Speedup FROM t JOIN (
    SELECT Size, Runtime FROM t WHERE Configuration = 0 
) `default` USING (Size) 

См. Его на sqlfiddle.

Смежные вопросы