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

标签 sql database oracle11g

比如说,你有一个类似的查询

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/

相关文章:

java - 如何使用 Java 将数据从 Oracle 数据库连接到 Kendo Grid?

MySQL 5.7 日期字段问题

sql - 我们应该在 sql-server 中使用 float 作为主键吗

javascript - 如何根据先前的属性值更新 DynamoDB 属性?

sql - 根据特定标准对记录进行分组并查找最大值

sql - 从表中选择 MIN 和 MAX 比预期的要慢

sql - 如何组合 GROUP BY 和 ROW_NUMBER?

python - 如何在 plpython 函数之间传递 int[] 作为参数

sql-server - 如何将Azure SQL数据库的存储大小扩大到大于4 TB?

android - 系统崩溃或重新启动时是否有任何事件/Intent 让我知道?