Выполнение арифметических операций над производными значениями SQL - PullRequest
8 голосов
/ 05 декабря 2011

Я делаю некоторые статистические данные на основе базы данных состояний. Я хотел бы вывести ранг состояния и его процент по сравнению с другими состояниями (т. Е. Значение состояния X превышает 55% от значения других состояний).

Я пытаюсь что-то вроде этого:

SELECT 
  count(*) AS TotalStates, 
  (SELECT COUNT(*) FROM states) AS NumberStates,
  (TotalStates/NumStates) AS percentage 
FROM states 
WHERE CRITERIA > 7.5

Я получаю ошибку SQL, TotalStates (мое производное значение) не найдено. Как я могу получить все три из этих значений, возвращаемых одним запросом?

Ответы [ 2 ]

9 голосов
/ 05 декабря 2011

Вы можете поместить основные вычисления в подвыбор, а затем сослаться на столбцы с псевдонимами во внешнем запросе, чтобы получить уже рассчитанные значения и получить из них еще одно:

SELECT
  TotalStates,
  NumberStates,
  TotalStates / NumberStates AS percentage
FROM (
  SELECT 
    COUNT(*) AS TotalStates, 
    (SELECT COUNT(*) FROM states) AS NumberStates
  FROM states 
  WHERE CRITERIA > 7.5
) s
2 голосов
/ 05 декабря 2011

Ошибка, которую вы получаете, происходит из-за того, что вы пытаетесь использовать производное значение в том же предложении select, в котором вы его создаете. Возможно, вам нужно будет сделать что-то вроде этого:

SELECT count(*) as TotalStates,
(SELECT count(*) from states) as NumberStates,
(count(*)/(SELECT count(*) from states)) as percentage
FROM states
WHERE criteria = x

Однако, это не очень эффективно или желательно для удобочитаемости или ремонтопригодности.Существует ли причина, по которой вы не можете выполнить это в двух запросах или, что еще лучше, получить два элемента данных в отдельных запросах и рассчитать процент в коде потребления?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...