Улучшение SQL-запроса - преобразование в десятичное число [закрыто]

avatar
Camus
9 августа 2021 в 01:44
52
1
-3

Я вычисляю проценты и конвертирую 2 целых числа в десятичные поля, так как мне нужно выполнить деление. Затем мне нужно преобразовать результат обратно в 2 десятичных знака. Затем я конвертирую это в строку, чтобы добавить %. Можно ли улучшить приведенный ниже запрос?

SELECT
    ISNULL(T2.PITXT,'NULL'),
    CAST(CAST((CAST(COUNT(ISNULL(T1.PID,1)) as decimal(18,2)) / (select  CAST(COUNT(ISNULL(PID,1))as decimal(18,2)) from UC02DCLNT00)) * 100 as decimal (18,2)) as varchar(6)) + '%'
FROM T1
LEFT JOIN T2 ON T1.PID=T2.PID
GROUP BY ISNULL(T2.PITXT,'NULL')
ORDER BY 2 DESC

Пример данных

PITXT   PID
'Other'   4
'Other'   4
'Other'   4
'Other'   4
'Car'     4
'Car'     4
'Car'     4
'Bike'    4

Желаемый результат:

'Other' 98.00%
'Car'   2.00%
'Bike'  1.00%
Источник
Gordon Linoff
9 августа 2021 в 01:49
0

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

Camus
9 августа 2021 в 01:53
0

@GordonLinoff Я добавил БД. Что касается выборки данных, я думаю, что это довольно очевидно, поскольку я просто подсчитываю количество строк. Таким образом, они являются значениями INT в конце

Dale K
9 августа 2021 в 01:55
1

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

Dale K
9 августа 2021 в 01:57
1

И что означает «Можно ли улучшить приведенный ниже запрос»? У вас проблемы с производительностью? Какого рода улучшения вы ищете?

Camus
9 августа 2021 в 03:12
0

@DaleK это извлечение данных по специальному запросу.

Camus
9 августа 2021 в 03:13
0

@DaleK Я хотел знать, не усложняю ли я запрос или есть более «чистый» способ добиться этого.

Ответы (1)

avatar
renegm
9 августа 2021 в 02:12
0
WITH T AS (
  SELECT COALESCE(T2.PITXT, 'NULL') AS Something1
       , 1.0 * COUNT(*) / (SELECT COUNT(*) FROM UC02DCLNT00) AS Something2Numeric
        FROM      T1
        LEFT JOIN T2
          ON T1.PID = T2.PID
       GROUP BY COALESCE(T2.PITXT, 'NULL'))
SELECT T.Something1, FORMAT(T.Something2Numeric, 'P') AS Something2
  FROM T
 ORDER BY T.Something2Numeric DESC;

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

Dale K
9 августа 2021 в 02:14
0

Хороший ответ объясняет, что он делает, в дополнение к предоставлению рабочего кода. Как насчет того, чтобы ваш ответ улучшился по сравнению с кодом в вопросе?

renegm
9 августа 2021 в 02:25
1

Я ленив, и это тривиальный вопрос. И какой ответ я не принял?

renegm
9 августа 2021 в 02:32
0

М-м-м. Что значит принять? Я проголосовал за ответы и прокомментировал ответы (не всегда).

John Cappelletti
9 августа 2021 в 02:33
0

Нажмите на галочку.