質問編集履歴
7
説明文修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
|
7
7
|
|
8
8
|
|
9
|
-
**
|
9
|
+
**現行スクリプト実行結果**
|
10
10
|
|
11
11
|
products cnt ratio purchasedBy
|
12
12
|
|
6
説明文修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -22,7 +22,7 @@
|
|
22
22
|
|
23
23
|
|
24
24
|
|
25
|
-
**処理後の
|
25
|
+
**期待する処理後の結果**
|
26
26
|
|
27
27
|
products cnt ratio purchasedBy
|
28
28
|
|
5
説明文修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -36,6 +36,26 @@
|
|
36
36
|
|
37
37
|
|
38
38
|
|
39
|
+
**productTypesテーブル**
|
40
|
+
|
41
|
+
productTypeId productname
|
42
|
+
|
43
|
+
1 apple
|
44
|
+
|
45
|
+
2 orange
|
46
|
+
|
47
|
+
|
48
|
+
|
49
|
+
**purchasedLogテーブル**
|
50
|
+
|
51
|
+
productTypeId purchased purchasedBy
|
52
|
+
|
53
|
+
1 2019-1-14 00:00:00 customer-a
|
54
|
+
|
55
|
+
2 2019-1-14 00:00:00 customer-b
|
56
|
+
|
57
|
+
|
58
|
+
|
39
59
|
**現行スクリプト**
|
40
60
|
|
41
61
|
```ここに言語を入力
|
@@ -48,7 +68,7 @@
|
|
48
68
|
|
49
69
|
where purchased between '2019-1-14 00:00:00' and '2019-1-15 00:00:00'
|
50
70
|
|
51
|
-
group by c
|
71
|
+
group by ct.products, c.purchasedBy),
|
52
72
|
|
53
73
|
total_amount as (
|
54
74
|
|
4
説明文修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -40,7 +40,7 @@
|
|
40
40
|
|
41
41
|
```ここに言語を入力
|
42
42
|
|
43
|
-
with
|
43
|
+
with prd_dist as (select ct.products, count(c.productTypeId) as cnt, c.purchasedBy
|
44
44
|
|
45
45
|
from PurchasedLog as c join ProductTypes as ct
|
46
46
|
|
@@ -54,7 +54,7 @@
|
|
54
54
|
|
55
55
|
select cd.*, sum(cd.cnt) over() as total_cnt
|
56
56
|
|
57
|
-
from
|
57
|
+
from prd_dist as cd)
|
58
58
|
|
59
59
|
select ta.products, ta.cnt, 100.0*ta.cnt/ta.total_cnt as ratio, ta.purchasedBy from total_amount as ta
|
60
60
|
|
3
説明文修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
同じユーザーが同じ品を購入した件数が複数行に分かれている場合、それらの行の購入件数(cnt列)を合計し一行として表示したいのですが、SQLのクエリーでその様な処理が可能でしょうか?以下の例ですとappleを購入したcustomer-aが対象となり、処理後のデータの通り購入件数が合計され7となるイメージです。sum関数にcase式を組み合わせる等、色々調べ試してみましたが有効な方法が見つからずおります。どなたかヒントやアドバイス頂けますと大変ありがたいです。
|
5
|
+
同じユーザーが同じ品を購入した件数が複数行に分かれている場合、それらの行の購入件数(cntとratio列)を合計し一行として表示したいのですが、SQLのクエリーでその様な処理が可能でしょうか?以下の例ですとappleを購入したcustomer-aが対象となり、処理後のデータの通り購入件数が合計され7となるイメージです。sum関数にcase式を組み合わせる等、色々調べ試してみましたが有効な方法が見つからずおります。どなたかヒントやアドバイス頂けますと大変ありがたいです。
|
6
6
|
|
7
7
|
|
8
8
|
|
2
説明文修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
同じユーザーが同じ品を購入した件数が複数行に分かれている場合、それらの行の購入件数(
|
5
|
+
同じユーザーが同じ品を購入した件数が複数行に分かれている場合、それらの行の購入件数(cnt列)を合計し一行として表示したいのですが、SQLのクエリーでその様な処理が可能でしょうか?以下の例ですとappleを購入したcustomer-aが対象となり、処理後のデータの通り購入件数が合計され7となるイメージです。sum関数にcase式を組み合わせる等、色々調べ試してみましたが有効な方法が見つからずおります。どなたかヒントやアドバイス頂けますと大変ありがたいです。
|
6
6
|
|
7
7
|
|
8
8
|
|
1
質問内容の修正、更新
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,31 +1,63 @@
|
|
1
|
+
現行のスクリプトを追記させて頂きました。
|
2
|
+
|
3
|
+
|
4
|
+
|
1
5
|
同じユーザーが同じ品を購入した件数が複数行に分かれている場合、それらの行の購入件数(Count列)を合計し一行として表示したいのですが、SQLのクエリーでその様な処理が可能でしょうか?以下の例ですとappleを購入したcustomer-aが対象となり、処理後のデータの通り購入件数が合計され7となるイメージです。sum関数にcase式を組み合わせる等、色々調べ試してみましたが有効な方法が見つからずおります。どなたかヒントやアドバイス頂けますと大変ありがたいです。
|
2
6
|
|
3
7
|
|
4
8
|
|
5
|
-
**処理前のデータ**
|
9
|
+
**処理前のデータ(現行スクリプト実行結果)**
|
6
10
|
|
7
|
-
product
|
11
|
+
products cnt ratio purchasedBy
|
8
12
|
|
9
|
-
**apple
|
13
|
+
**apple 2 12% customer-a**
|
10
14
|
|
11
|
-
a
|
15
|
+
orange 3 18% customer-b
|
12
16
|
|
13
|
-
**apple
|
17
|
+
**apple 5 31% customer-a**
|
14
18
|
|
15
|
-
orange
|
19
|
+
orange 4 25% customer-c
|
16
20
|
|
17
|
-
|
21
|
+
apple 2 12% customer-d
|
18
22
|
|
19
23
|
|
20
24
|
|
21
25
|
**処理後のデータ**
|
22
26
|
|
23
|
-
product
|
27
|
+
products cnt ratio purchasedBy
|
24
28
|
|
25
|
-
**apple 7
|
29
|
+
**apple 7 43% customer-a**
|
26
30
|
|
27
|
-
a
|
31
|
+
orange 3 18% customer-b
|
28
32
|
|
29
|
-
orange 4 customer-
|
33
|
+
orange 4 25% customer-c
|
30
34
|
|
31
|
-
|
35
|
+
apple 2 10% customer-d
|
36
|
+
|
37
|
+
|
38
|
+
|
39
|
+
**現行スクリプト**
|
40
|
+
|
41
|
+
```ここに言語を入力
|
42
|
+
|
43
|
+
with cmds_dist as (select ct.products, count(c.productTypeId) as cnt, c.purchasedBy
|
44
|
+
|
45
|
+
from PurchasedLog as c join ProductTypes as ct
|
46
|
+
|
47
|
+
on c.productTypeId = ct.productTypeId
|
48
|
+
|
49
|
+
where purchased between '2019-1-14 00:00:00' and '2019-1-15 00:00:00'
|
50
|
+
|
51
|
+
group by c.productTypeId, ct.products, c.purchasedBy),
|
52
|
+
|
53
|
+
total_amount as (
|
54
|
+
|
55
|
+
select cd.*, sum(cd.cnt) over() as total_cnt
|
56
|
+
|
57
|
+
from cmds_dist as cd)
|
58
|
+
|
59
|
+
select ta.products, ta.cnt, 100.0*ta.cnt/ta.total_cnt as ratio, ta.purchasedBy from total_amount as ta
|
60
|
+
|
61
|
+
order by ta.cnt desc
|
62
|
+
|
63
|
+
```
|