Процент от числа sql

Привет, как я могу получить процент каждой записи по сравнению с общей суммой? Предположим, что у меня есть одна таблица со следующими

Процент для ID 1 равен 20% для 2 составляет 30% , и поэтому один как мне его получить?

Там пара подходит для получения этого результата.

Вам по существу нужны "тотальные" точки из всей таблицы (или любого другого подмножества) и повторяйте это в каждой строке. Получение процента — это простой вопрос арифметики, выражение, которое вы используете для этого, зависит от типов данных и от того, как вы хотите отформатировать.

Здесь один из способов (из нескольких возможных способов) получить заданный результат:

Сначала выполняется запрос на просмотр s , который дает одну строку. Операция join соответствует этой строке с каждой строкой из t . И это дает нам значения, необходимые для вычисления процента.

Другой способ получить этот результат без использования операции объединения — использовать подзапрос в списке SELECT, чтобы вернуть итоговое значение.

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

Чтобы получить этот результат, мы можем использовать тот же запрос, но запрос aa view для s , который возвращает итоговый GROUP BY r.type , а затем операция соединения не является соединением CROSS, а совпадением на основе типа:

Чтобы сделать тот же результат с подзапросом, это будет коррелированный подзапрос, и этот подзапрос, скорее всего, будет выполнен для каждой строки в t .

Вот почему для меня более естественно использовать операцию объединения, а не подзапрос в списке SELECT. даже если подзапрос работает одинаково. (Шаблоны, которые мы используем для более сложных запросов, таких как присвоение псевдонимов таблицам, отбор всех ссылок на столбцы и форматирование SQL. эти шаблоны просто возвращаются к простым запросам. Обоснование этих шаблонов выглядит просто потерянным в простых запросы.)

Читайте также  Система полного привода хендай туссан 2018

1 vipin tp [2015-01-16 13:37:00]

Я должен рассчитать процент, основанный на подсчете. Ниже приведен пример таблицы данных.

Я хочу показать процент, основанный на greatest value в Count1 . The expecting output sample is given below:

Помогите найти правильное решение. Спасибо.

5 ответов

4 Решение Pரதீப் [2015-01-16 13:40:00]

используйте метод Max()over() чтобы найти максимум всей строки.

или Используйте subquery чтобы найти Max и выполнить математику

1 DirkNM [2015-01-16 13:48:00]

Возможно, это поможет вам:

1 Ajay2707 [2015-01-16 13:48:00]

Что для нулевых значений в Count1. Я могу улучшить ответ, если вы описали случай, что делать, когда MAX (Count1) равен нулю.

глядя на ваш вопрос, кажется, что если значение равно 1, то оно составляет 33,33%, для 2 — 66,6%, а для 3 — 100%. в этом случае yuo может попробовать следующее:

если это не так, то, пожалуйста, объясните, почему для row3 в вашей таблице, как проценты1, так и 0 составляют 33,33%

у меня есть таблица SQL Server, которая содержит пользователей и их оценки. Для простоты давайте просто скажем, что есть 2 столбца — name & grade . Таким образом, типичной строкой будет имя: "Джон Доу", класс:"а".

Я ищу один оператор SQL, который найдет проценты всех возможных ответов. (A, B, C и т. д. ) Кроме того, есть ли способ сделать это без определения всех возможных ответов (открытое текстовое поле — пользователи могут ввести "pass/fail", "none" и т. д. )

финал выход, который я ищу, — это A: 5%, B: 15%, C: 40% и т. д.

11 ответов

Я проверил следующее, И это работает. Ответ Гордия был близок, но имел умножение 100 в неправильном месте и имел некоторые отсутствующие скобки.

Читайте также  Ростелеком чита личный кабинет

наиболее эффективный (использование over ()).

универсальный (любая версия SQL).

С CTE, наименее эффективным.

вместо использования отдельного CTE для получения общей суммы Вы можете использовать функцию окна без предложения "partition by".

Если вы используете:

чтобы получить счетчик для группы, вы можете использовать:

чтобы получить общее количество.

это, как правило, быстрее в моем опыте, но я думаю, что он может внутренне использовать временную таблицу в некоторых случаях (я видел "рабочий стол" при работе с " set statistics io on").

EDIT: Я не уверен, что мой пример запроса-это то, что вы ищете, я просто иллюстрировал, как работают оконные функции.

вы должны рассчитать общее количество оценок Если это SQL 2005, вы можете использовать CTE

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

вы должны указать систему, которую вы используете.

Я просто использую это, когда мне нужно разработать процент..

обратите внимание, что 100.0 возвращает десятичные дроби, тогда как 100 самостоятельно округляет результат до ближайшего целого числа, даже с помощью функции ROUND ()!

это, я считаю, общее решение, хотя я тестировал его с помощью IBM Informix Dynamic Server 11.50.ГС3. Следующий запрос:

дает следующие выходные данные по тестовым данным, показанным ниже горизонтального правила. The ROUND функция может быть специфичной для СУБД, но остальные (возможно) нет. (Обратите внимание, что я изменил 100 на 100.0, чтобы гарантировать, что вычисление происходит с использованием нецелочисленного десятичного, числового арифметического; см. комментарии и спасибо Гром.)

должно работать следующее

EDIT: переместил * 100 добавил 1.0 чтобы убедиться, что он не выполняет целочисленное деление

Читайте также  Представьте десятичные числа в беззнаковом 8 разрядном

в любой версии sql server вы можете использовать переменную для общего числа всех классов, как это:

вы можете использовать подзапроса выборки в запросе (хоть и не уверен, что быстрее):

вы также можете использовать хранимую процедуру (извинения за синтаксис Firebird):

Ссылка на основную публикацию
Adblock
detector