2009-12-10 4 views
0

Используя этот запрос,Проценты в MySQL

SELECT company, YEAR(date) as year, COUNT(*) as total 
FROM table 
WHERE company = "Medtronic" 
OR company = "Private" 
GROUP BY YEAR(date) 

Я получаю таблицу, как это:

Company   year total 
Medtronic 1998 6 
Private  1998 5 
Medtronic 1999 5 
Private  1999 1 

Как рассчитать%, что способствовало каждой компании за каждый год?

Например, процент пополняемая Medtronic в 1998 году составляет 6/(6 + 5) = 54,5%

Я пытался сделать запрос MySQL для расчета процентов.

Спасибо, ребята.

+0

@SQL Студент: Вы можете разместить несколько примеров? Проценты, которые не выходят, звучат очень странно, особенно если общее количество компаний соответствует действительности. –

+0

Я отредактировал ваш код, чтобы удалить некоторые синтаксические ошибки, пример опубликован во втором ответе ниже, спасибо –

ответ

6

Использование:

SELECT x.company, 
     x.year, 
     x.annual_total 
     x.annual_total/y.total AS percentage 
    FROM (SELECT t.company, 
       YEAR(t.date) as year, 
       COUNT(*) as annual_total 
      FROM TABLE t 
     WHERE t.company IN ('Medtronic', 'Private') 
     GROUP BY YEAR(t.date)) x 
    JOIN (SELECT t.company, 
       COUNT(*) 'total' 
      FROM TABLE t 
     WHERE t.company IN ('Medtronic', 'Private') 
     GROUP BY t.company) y ON y.company = x.company 

Если вы хотите, процент с определенными знаками после запятой, использование:

CAST(x.annual_total/y.total AS DECIMAL(2,2)) AS percentage 

Убедитесь, что это дает количество каждой компании вы ожидаете:

SELECT t.company, 
     COUNT(*) 'total' 
    FROM TABLE t 
    WHERE t.company IN ('Medtronic', 'Private') 
GROUP BY t.company 
+0

Извините, это может показаться глупым вопросом, но Что делает «x» в «x.year» и «y «в« y.year »и« t »в« t.company »? Я заменил «t» на имена таблиц и «y» на имена столбцов? Спасибо большое! –

+0

Не совсем глупо. 'x' и' y' - это псевдонимы таблицы, такие же как 't'. Это просто сокращение, которое вы можете использовать для ссылки на таблицы без ввода полного имени. Это необходимо, если у вас одинаково названные столбцы, и когда вы присоединяетесь к таблице на себя. –

+0

Я внесла некоторые изменения в решение, которое вы мне дали, как еще один ответ, показанный ниже (это будет выглядеть плохо в комментарии), однако результат довольно далек. Я где-то ошиблась? Еще раз большое спасибо. –

0

Мой SQL-запрос:

SELECT x.company, x.year, x.annual_total, CAST(x.annual_total/y.total AS DECIMAL(2, 2)) AS percentage 
FROM (

SELECT t.company, YEAR(t.date) AS year, COUNT(*) AS annual_total 
FROM my_patents AS t 
WHERE t.company = 'Private' 
GROUP BY YEAR(t.date) 
)x 
JOIN (

SELECT t.company, COUNT(*) AS total 
FROM my_patents AS t 
WHERE t.company = 'Medtronic' 
OR t.company = 'Private' 
GROUP BY t.company 
)y ON y.company = x.company 

мои результаты:

Private 1998 5 0.04 

, когда я запустить этот запрос:

SELECT t.company, YEAR(date) , COUNT(*) AS total 
FROM my_patents AS t 
WHERE t.company = 'Medtronic' 
OR t.company = 'Private' 
GROUP BY t.company, YEAR(date) 

я

Medtronic 1998 6 
Private 1998 5 
+0

Ah - аннулирует группу в таблице 'y'. Я обновил мой. –