-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsql level up.sql
155 lines (137 loc) · 2.97 KB
/
sql level up.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
--set statistics io on
/*
------------cross apply
select o.id orderid,
quantity,
t.*
from [order] o
cross apply
(
select top 1 *
from orderItem od
where o.Id = od.OrderId
order by od.quantity desc
) t
order by o.id
select o.id orderid,
od.quantity,
od.*
from [order] o join
(
select row_number() over (partition by orderid order by oi.quantity desc) num
,*
from orderitem oi
) od on o.id = od.OrderId
where od.num = 1
order by o.id
*/
/*
--------partition by
select distinct
o.Id,
o.ShippingMethod,
o.CustomerId,
o.PaidDateUtc,
sum(od.quantity) over(partition by od.orderId) quantity,
sum(od.priceInclTax) over(partition by od.orderId) total,
o.OrderTotal
from OrderItem od join [Order] o on od.OrderId = o.Id
select o.Id,
o.ShippingMethod,
o.CustomerId,
o.PaidDateUtc,
ord.quantity,
ord.total,
o.OrderTotal
from [Order] o join(select od.OrderId,
sum(od.quantity) quantity,
sum(od.priceInclTax) total
from OrderItem od
group by od.OrderId) ord on o.Id = ord.OrderId
*/
/*
-----------grouping sets
select CustomerId,
null as shippingMethod,
sum(ordertotal) total
from [Order] o
group by CustomerId
union all
select null as CustomerId,
shippingMethod,
sum(ordertotal) total
from [Order] o
group by shippingMethod
select customerId,
shippingmethod
,sum(ordertotal)
from [Order] o
group by grouping sets (customerId, shippingmethod)
*/
/*
----------lead
select o1.id
,o1.r1
,o1.customerId
,o1.c1
,o1.orderTotal
,'|' '|'
,o2.id
,o2.r2
,o2.customerId
,o2.c2
,o2.orderTotal
from (
select o.Id,
row_number() over (order by o.id) r1,
orderTotal,
o.customerId,
row_number() over (partition by o.customerId order by o.id) c1
from [Order] o
) o1 left join
(
select o.Id,
row_number() over (order by o.id) r2,
orderTotal,
o.customerId,
row_number() over (partition by o.customerId order by o.id) c2
from [order] o
) o2 on o1.c1 = o2.c2 - 1 and o1.CustomerId = o2.CustomerId --on o1.r1 = o2.r2 - 1
where o1.c1 = 1 and o1.ordertotal <= o2.ordertotal
order by o1.r1
select orderTotal, *
from
(
select
row_number() over (partition by customerId order by id) as num,
lead(orderTotal, 1, -1) over (partition by customerId order by id) as leadOrderTotal
,*
from [order]
) o
where orderTotal <= leadOrderTotal and
leadOrderTotal <> -1 and
num = 1
*/
--select id, customerid, ordertotal
--from [Order]
--order by customerid, id
--select customerid
--from [order]
--group by customerid
--having count(*) > 1
--select CustomerId,
-- null as shippingMethod,
-- sum(ordertotal) total
--from [Order] o
--group by CustomerId with rollup
/*
select o.Id,
o.ShippingMethod,
o.CustomerId,
o.PaidDateUtc
from
select *
from OrderItem
select *
from [Order]
*/