说,你有一个像
这样的查询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%
答案 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