SQL делить на два счета () - PullRequest
10 голосов
/ 14 июля 2009

У меня следующий запрос, который пытается вычислить процентное соотношение определенного продукта по сравнению с общим количеством продуктов IE: [Количество продуктов] / [Всего продуктов] = Процент

;WITH totalCount AS(
    SELECT 
        CAST(COUNT(id) as Integer)as totalCount
    FROM TABLE_NAME
)
SELECT 
    ((CAST(COUNT(DISTINCT id) as Integer)/(SELECT * FROM totalCount))*100) as 'Percent'
FROM TABLE_NAME

Тем не менее, столбец процентов всегда возвращает «0», если нет только одной записи. Кроме того, есть ли способ добавить запрос totalCount и Select в один?

Как разделить два поля Count ()?

Ответы [ 3 ]

10 голосов
/ 14 июля 2009

Приведите общее количество к числу, кроме целого числа (DECIMAL?) - математика округляется.

5 голосов
/ 14 июля 2009

Приводится как нечто с десятичной точностью, а не как целое число. Поплавок или реал.

select cast(distinctCount as real)/cast(totalCount as real) * 100.00
   , distinctCount
   , totalCount
from (
 select count(distinct id) as distinctCount
  , count(id) as totalCount
  from Table) as aggregatedTable
2 голосов
/ 14 июля 2009

Разве это не должно быть:

;WITH totalCount AS(
    SELECT 
        CAST(COUNT(id) as Integer)as totalCount
    FROM TABLE_NAME
)
SELECT 
    ((CAST(COUNT(DISTINCT id) as Integer)*100/(SELECT count(*) FROM totalCount))) as 'Percent'
FROM TABLE_NAME

Обратите внимание на SELECT COUNT (*). Кроме того, вы должны умножить перед делением, иначе вы всегда получите ноль

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