Как Сделать Процент/Общее количество в SQL?

Существует различие между C++ и C# в этом конкретном случае. В C++ не инициализируется объект, и поэтому небезопасно вызвать virutal функцию в конструкторе. В C#, когда объект класса создается, все его участники являются инициализированным нулем. Возможно вызвать виртуальную функцию в конструкторе, но если Вы будете, мог бы получить доступ к участникам, которые являются все еще нулевыми. Если Вы не должны получать доступ к участникам, довольно безопасно вызвать виртуальную функцию в C#.

28
задан hobodave 26 July 2009 в 07:14
поделиться

4 ответа

MySQL:

SELECT ROUND(
  100.0 * (
      SUM(IF(cust_id = 541, 1, 0)) / COUNT(order_id)
  ), 1) AS percent_total
FROM orders;

Edit

Думаю, поможет, если бы я заметил тег postgres . Я думал, что это вопрос MySQL.

PostgreSQL:

SELECT ROUND(
  100.0 * (
      SUM(CASE WHEN cust_id = 541 THEN 1 ELSE 0 END) / COUNT(order_id)
  ), 1) AS percent_total
FROM orders;

PS Мой PostgreSQL заржавел, поэтому, если запрос MySQL работает на PostgreSQL, я хотел бы знать :)

Редактировать 2

Я не могу стресса достаточно, чтобы опасаться предложенного ниже количества (*). Обычно вы хотите избежать этого с PostgreSQL.

37
ответ дан 28 November 2019 в 03:30
поделиться

Одно из решений - использовать вложенный запрос-

SELECT count(*) / (SELECT count(*) FROM orders)
FROM orders
WHERE cust_id = 541
10
ответ дан 28 November 2019 в 03:30
поделиться
select max([order].customerid) customer_id, count(orderid) customer_orders, (select count(orderid) from [order]) as total_orders,
100.0 * (count(orderid))/(select count(orderid) from [order])
from [order] inner join customer
on [order].customerid = customer.customerid
group by [order].customerid

Для иллюстрации поток, я включил больше столбцов, чем вам нужно, в окончательный набор результатов. Удержание счетчика (order_id) во временной переменной будет более эффективным. Я не привык к postgres, надеюсь, это сработает с минимальными изменениями.

-4
ответ дан 28 November 2019 в 03:30
поделиться
select abc.item_name, sum(amount) as total
  from (select a.item_id, d.applicablefrom, a.item_name, a.final_item_status, d.rate, c.item_name as sub_item_name,
               b.sub_item_qty as itemqty, (b.sub_item_qty * d.rate) as amount 
          from tblitem_master a,
               tblitem_master c,
               tblitem_bom_master b,
               (select rate, applicablefrom, itemid
                  from tblperiodrates
                 where applicablefrom = (select max(applicablefrom) 
                                           from tblperiodrates
                                          where applicablefrom<='2005-5-18')) as d
         where a.item_id = b.item_id
           And b.sub_item_id = c.item_id
           and b.sub_item_id = d.itemid
           and a.final_item_status='f') as abc
 group by abc.item_name
-2
ответ дан 28 November 2019 в 03:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: