SQL делить на два счета ()

У меня есть следующий запрос, который пытается выяснить процентную долю определенного продукта по сравнению с общим количеством продуктов. 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)

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

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
 14 июл. 2009 г., 22:15
@Jefe: как насчет +1 тогда? лол
 14 июл. 2009 г., 22:54
используйте десятичное число, никогда не используйте float или real в математических вычислениях, так как они являются неточными типами данных и могут привести к ошибкам округления.
 Jefe14 июл. 2009 г., 22:05
Спасибо, что показали мне, как объединить два запроса в один.

Не должно ли это быть:

;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 (*). Кроме того, вы должны умножить перед делением, иначе вы всегда получите ноль

 14 июл. 2009 г., 21:58
хорошо :-) Но умножение на 100, безусловно, решит вашу проблему.
 Jefe14 июл. 2009 г., 21:53
Я так не думаю, так как запрос totalCount возвращает только одну строку, поэтому, если вы добавите в COUNT (*), он всегда будет возвращать 1 вместо фактической суммы. Спасибо за помощь, хотя :)
Решение Вопроса

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

 15 июл. 2009 г., 00:01
Я обычно использую еще более простой хак и вместо умножения на 100 умножаю на 100,0
 14 июл. 2009 г., 21:58
Обязательно прокомментируйте этот код. Следующий разработчик может оказаться не таким умным, как вы.
 14 июл. 2009 г., 21:59
@ Мэтью: отличное предложение!
 Jefe14 июл. 2009 г., 21:54
Спасибо, что сработало! Это всегда простые вещи, которые вас заводят.

Ваш ответ на вопрос