比如说,你有一个类似的查询
SELECT COUNT(*), date FROM ORDERS GROUP BY date ORDER BY date
但您还希望拥有第三个“幻影/虚拟字段”,它基本上告诉您每天特定类型的订单比例(比如“餐具”和“易腐烂元素”)。
我应该说 ORDERS 表中有一个附加列,它具有订单类型:
order_type
第三个虚拟列应该做一些事情,比如计算某个日期具有“Utensils”或“Perishables”类型(不是 XOR)的订单数,然后除以当天的订单总数,然后四舍五入到小数点后两位,并附加百分号。
最后几个格式化的东西,并不是很重要......我真正需要知道的是如何在有效的 PLSQL 语法中应用逻辑。
示例输出
4030 2012-02-02 34.43%
4953 2012-02-03 16.66%
最佳答案
你可以做类似的事情
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
关于sql - 在Oracle SQL中,如何查询某个值的记录所占的比例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9669598/