Проценты в MySQL

0

Используя этот запрос,

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 Student: Можете ли вы опубликовать несколько примеров? Процент, который не выходит, звучит очень странно, особенно если общее количество на одну компанию является правильным.
  • 0
    Я отредактировал ваш код, чтобы удалить некоторые синтаксические ошибки, пример размещен во втором ответе ниже, спасибо
Теги:

2 ответа

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 . Это просто сокращение, которое вы можете использовать для ссылки на таблицы без необходимости вводить полное имя. Это требуется, когда у вас есть столбцы с одинаковыми именами и когда вы присоединяете таблицу к себе.
Показать ещё 2 комментария
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
    Ах - забывает сделать группу в таблице y . Я обновил мой.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню