Используя этот запрос,
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 для вычисления процентов.
Спасибо, ребята.
Использование:
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
x
и y
- псевдонимы таблицы, такие же, как t
. Это просто сокращение, которое вы можете использовать для ссылки на таблицы без необходимости вводить полное имя. Это требуется, когда у вас есть столбцы с одинаковыми именами и когда вы присоединяете таблицу к себе.
Мой 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
y
. Я обновил мой.