2014-02-05 3 views
2

Я хотел бы знать, как сделать разделение между двумя столбцами в двух отдельных таблицах.Рассчитать процент от 2 столбцов в 2 разных таблицах

У меня есть 2 таблицы:

  • Гонка, показывая все расы для всех водителей

    Driver | Race 
    ----------------- 
    Driver 1 | Race 1 
    Driver 1 | Race 2 
    Driver 1 | Race 3 
    Driver 2 | Race 1 
    
  • PPosition, показывая поул всех водителей

    Driver | PP 
    -------------- 
    Driver 1 | PP1 
    Driver 1 | PP2 
    Driver 2 | PP1 
    

Итак, я хотел бы знать, как получить процент от полюса позиции водителя (поул-позиции/всего гонок водителя * 100)

У меня есть этот запрос, но он не работает, результатом является пустая таблица

SELECT R.Driver, 
    P.Driver, 
    (P.Driver/R.Driver)*100 AS M2 
FROM Races AS R 
INNER JOIN Pposition AS P ON R.Driver=P.Driver 
GROUP BY P.Driver HAVING R.Driver > 10 
ORDER BY M2 DESC 
LIMIT 0,50 

Вывод, который я хочу что-то вроде

Driver | % 
    ----------------- 
    Driver 2 | 100 
    Driver 1 | 66.6 

заранее спасибо всем

+2

Можете ли вы добавить примерный вывод, который вы ожидаете. – user2989408

+1

Пожалуйста, добавьте образец вывода и ошибку, если вы получите. –

ответ

0

Вы можете выполнить это с помощью подзапросов. Например:

SELECT R.Driver, S.Cnt AS Races, P.Cnt AS Poles, (P.Cnt/S.Cnt) * 100 AS M2 
FROM Races AS R 
LEFT JOIN (SELECT Driver, COUNT(*) AS Cnt FROM Races) AS S ON S.Driver = R.Driver 
LEFT JOIN (SELECT Driver, COUNT(*) AS Cnt FROM PPosition) AS P ON P.Driver = R.Driver 
WHERE R.Driver > 10 
ORDER BY M2 DESC 

EDIT:

Здесь с одним подзапроса:

SELECT R.Driver, (P.Cnt * 100/COUNT(*)) AS M2 
FROM Races AS R 
LEFT JOIN (SELECT Driver, COUNT(*) AS Cnt FROM PPosition GROUP BY Driver) AS P ON P.Driver = R.Driver 
GROUP BY R.Driver, P.Cnt 
ORDER BY M2 DESC 
+0

Спасибо за ваш ответ ... он отлично сработал :)) –

0

Но, ответ на даб Stylee есть ошибка, которая должна быть фикс -

Column 'PPosition.Driver' is invalid in the select list because 
it is not contained in either an aggregate function or the GROUP BY clause. 

Вот как бы я это сделал -

Во-первых, разделите свою проблему на части. Получить сгруппированные данные из каждой таблицы -

SELECT Driver, Count(Race) as [Races] 
FROM Races 
GROUP BY Driver 

SELECT Driver, COUNT(PP) as [pposition] 
FROM Pposition 
GROUP BY Driver 

Затем мы подключить его в запрос, присоединиться к нескольким запросов -

SELECT R.Driver, (P.pposition/R.Races)*100 AS M2 
FROM 
(
-- Put 1st query here 
) AS R 
INNER JOIN -- or left join 
(
-- Put 2nd query here 
) AS P 
ON R.Driver = P.Driver 

Затем окончательный запрос стал -

SELECT R.Driver, (P.pposition/R.Races)*100.00 AS M2 
FROM 
(
SELECT Driver, Count(Race) as [Races] 
FROM Races 
GROUP BY Driver 
) AS R 
LEFT JOIN 
(
SELECT Driver, COUNT(PP) as [pposition] 
FROM Pposition 
GROUP BY Driver 
) AS P 
ON R.Driver = P.Driver 

Используя только данные, которые вы указали в вопросе, я получаю вывод:

Driver M2 
Driver 1 100.00 
Driver 2 100.00 
Driver 3 NULL 
+0

Простите, у меня отсутствовала GROUP BY в моем редактировании. Я исправил свой ответ, чтобы отразить изменения. Спасибо, что указал на Бората. –

+0

Спасибо за ваше время .... Я действительно уговорил его. –

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