在Oracle SQL中,如何查询某个值的记录比例?

时间:2012-03-12 15:07:49

标签: sql database oracle11g

说,你有一个像

这样的查询
SELECT COUNT(*), date FROM ORDERS GROUP BY date ORDER BY date

但你也想要第三个“幻像/虚拟场”,它基本上告诉你每天特定类型的订单分数(比如说“Utensils”和“Perishables”)。

我应该说ORDERS表中还有一个具有订单类型的列:

order_type

第三个虚拟列应该做一些事情,比如在具有“Utensils”或“Perishables”类型(不是XOR)的日期上获取订单的数量,然后除以当天的订单总数,然后舍入到2个小数点,并附加一个百分号。

最后几个格式化的东西,并不重要......我真正需要知道的是如何在有效的PLSQL语法中应用逻辑。

示例输出

4030 2012-02-02 34.43%
4953 2012-02-03 16.66%

2 个答案:

答案 0 :(得分:1)

您可以执行类似

的操作
SELECT COUNT(*), 
       dt,
       round( SUM( CASE WHEN order_type = 'Utensils'
                        THEN 1
                        ELSE 0
                    END) * 100 / COUNT(*),2) fraction_of_utensils_orders
  FROM ORDERS 
 GROUP BY dt
 ORDER BY st

如果您觉得更容易理解,也可以

SELECT COUNT(*), 
       dt,
       round( COUNT( CASE WHEN order_type = 'Utensils'
                          THEN 1
                          ELSE NULL
                      END) * 100/ COUNT(*), 2) fraction_of_utensils_orders
  FROM ORDERS 
 GROUP BY dt
 ORDER BY st

答案 1 :(得分:1)

添加要查询的相同类型的订单总和:

select
    o.*,
    (
        select count(o2.OrderType)
        from ORDERS o2
        where o2.OrderType = o.OrderType
    ) as NumberOfOrdersOfThisType
from ORDERS o

添加相同类型的订单分数进行查询:
(检查变量定义以确保它是PL / SQL)

declare totalCount number

select count(*)
into totalCount
from ORDERS

select
    o.*,
    (
        select count(o2.OrderType)
        from ORDERS o2
        where o2.OrderType = o.OrderType
    ) / totalCount as FractionOfOrdersOfThisType
from ORDERS o