天寒地冻,呆在家里又读完了《Mastering Oracle SQL》2nd,发现Oracle的功能还是很强悍,光函数就有两百个,那些面向对象的查询语言很难模拟,特别是SQL2003里针对OLAP的windows function等。
幸好Hibernate3.0也支持SQL了。
引用自:
http://dev.csdn.net/develop/article/81/81836.shtm
Select area,month,sum(total_sale) from SaleOrder group by rollup(area,month)就能产生和报表一模一样的纪录
Select year,month,area,sum(total_sale) from SaleOrder group by year, rollup(month,area)另外Oracle 9i还支持如下语法:
Select year,month,area,sum(total_sale) from SaleOrder group by rollup((year,month),area)
Select Decode(Grouping(area),1,'所有地区',area) area,
Decode(Grouping(month),1,'所有月份',month),
sum(money)
From SaleOrder
Group by RollUp(area,month);
SELECT LEVEL, name, emp_id,manager_emp_id
FROM employee
START WITH manager_emp_id is null
CONNECT BY PRIOR emp_id = manager_emp_id;
SELECT salesperson_id, SUM(tot_sales) sp_sales,
RANK( ) OVER (ORDER BY SUM(tot_sales) DESC) sales_rank
FROM orders
GROUP BY salesperson_id
SELECT cust_nbr, SUM(tot_sales) cust_sales,NTITLE(4)把纪录以 SUM(tot_sales)排序分成4份.
NTILE(4) OVER (ORDER BY SUM(tot_sales) DESC) sales_quartile
FROM orders
GROUP BY cust_nbr
ORDER BY 3,2 DESC;
SELECT month, SUM(tot_sales) monthly_sales,
SUM(SUM(tot_sales)) OVER (ORDER BY month
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) max_preceeding
FROM orders
GROUP BY month
ORDER BY month;
SELECT month, SUM(tot_sales) monthly_sales,
AVG(SUM(tot_sales)) OVER (ORDER BY month
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) rolling_avg
FROM orders
GROUP BY month
ORDER BY month;
UPDATE monthly_orders
SET (tot_orders, max_order_amt) =
(SELECT COUNT(*), MAX(sale_price)
FROM cust_order)
DELETE FROM line_item
WHERE (order_nbr, part_nbr) IN
(SELECT order_nbr, part_nbr FROM cust_order c)
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/1605/viewspace-598064/ ,如需转载,请注明出处,否则将追究法律责任。