Kali ini saya kembali melanjutkan Mini Task lanjutan untuk SQL dengan judul SQL for Data Analysis 1. dimana masih berkaitan dengan pelajaran dari Mini Task sebelumnya. untuk artikel kali lebih ke praktek penggunaan Subquery dan CTE.
Okey..tanpa berlama-lama …let’s do it !!!
Soal 1. Kalian pastikan bahwa satu nama konsumen hanya memiliki satu customer id!
dari data table orders sebelumnya diketahui bahwa data tersebut berisi nama konsumen dan juga customer id. dan sesuai soal 1 diatas saat di query ternyata benar. terbukti…setiap konsumen hanya memiliki 1 id…tahunya dari mana ?.
select customer_name, customer_id from orders
group by customer_name, customer_id
order by customer_name asc
query diatas untuk mencari dan menampilkan data customer name dan customer_id secara berdampingan/berpasangan yang sudah di group by 2 kolom tersebut. yang menghasilkan data sbb :
karena perintah group by maka 1 baris table diatas adalah 1 pasang. ( nama + customer id) dan terlihat total data ada 793 pasang.
dari total 793 rows ini kita barulah bisa mengecek apakah ada data yang memiliki customer_id lebih dari 1 untuk nama yang sama dengan cara SubQuery :
select a.customer_name, count(customer_id) as jumlah_custid
from (
select customer_name, customer_id from orders
group by customer_name, customer_id
order by customer_name asc
) a
group by a.customer_name
having count(customer_id) > 1;
menghasilkan total row kosong :
query diatas melakukan agregasi count(customer_id) dari data query pertama total 793 rows tersebut yang sudah di kelompokan berdasarkan customer_name dan di kondisikan hasil count(customer_id) lebih besar dari 1 dengan syntax having count(customer_id) >1. Dengan hasil yang kosong maka artinya memang tidak ada data yang sama.
cara lain yang lebih rapi dalam hal penulisan syntax query adalah dengan CTE.
Apa itu CTE?
Common Table Expression adalah result set sementara yang dapat direferensikan oleh perintah SQL lain yang umumnya adalah query syntax SELECT lainnya. tapi penggunakannya bisa juga dengan query-query manipulasi data lainnya seperti INSERT, DELETE dan UPDATE. Jika dibandingkan dengan teknik subquery yang Inject langsung query dalam query, CTE menawarkan cara yang lebih elegan dan rapi. Setiap query ditampung dalam blok-blok yang dapat diperlakukan seperti tabel dan bahkan bisa di — subquery — kan juga.
-- CTE
with nama_dan_id_sepasang as (
select customer_name, customer_id from orders
group by customer_name, customer_id
order by customer_name asc
)
-- cte dipanggil dan ditampilkan
select customer_name, count(customer_id) jumlah_custid
from nama_dan_id_sepasang
group by customer_name
having count(customer_id) > 1;
dan hasilnya juga sama yaitu kosong karena memang tidak ada.
Soal 2. Produk (product_name) apa yang paling best selling
arti dari “paling best selling “ yaitu secara quantity paling banyak terjual.
sehingga query yang perlukan untuk mengecek top number 1 produk yang paling banyak terjual adalah
select product_name, count(quantity) totalqty from orders
group by product_name
order by totalqty desc
limit 1;
output dari hasil query syntax diatas adalah sbb :
dimana produk name : “Staple envelope” adalah yang terbanyak terjual yaitu sebanyak 48 pcs.
Soal 3. Produk apa yang paling merugikan selama tahun 2017
paling merugikan berarti profit yang paling terkecil selama 2017 maka bisa dicari dengan query berikut :
select product_name, order_date, profit from orders
where extract(year from order_date) = 2017
order by profit asc
limit 1
di dapat hasil query sbb :
produk “GBC DocuBind P400 Electric Binding System” di jual di tanggal 26 juli 2017 dan mengasilkan profit dengan kondisi minus tertinggi yaitu -3701.8928.
Done untuk Mini Task SQL for Data Analysis
terima kasih. semoga bermanfaat.
kembali ke Mini Task Basic SQL 3