Tolong pilih kategori sesuai, jenis posting (pertanyaan atau bukan) dan sertakan tag/topik yang sesuai misal komputer, php, mysql, dll.
Promosi atau posting tidak pada tempatnya akan kami hapus.
Mencantumkan kode program di posting Anda, tolong ikuti aturan yang sesuai, baca http://diskusiweb.com/discussion/39204/aturan-cara-menyisipkan-kode-program-di-diskusiweb

Baca cara posting gambar/image di post Anda: http://www.diskusiweb.com/discussion/47345/cara-menyisipkan-menyertakan-image-pada-posting/p1

Query Menjumlahkan Nilai Berdasarkan tahun sebelumnya dan tahun sekarang

Permisi master..
Mohon pencerahan.

Saya menemui masalah,
Saya ada tabel,
-----------------------------------------------
id_wakt id_prodi jumlah_mahasiswa
-----------------------------------------------
2012 1 582
2012 2 290
2012 3 762
2013 1 447
2013 2 298
2013 3 666
2014 1 521
2014 2 310
2014 3 678
----------------------------------------------

Pertanyaannya :

Misal :
-Tahun 2012, total mahasiswa pada masing2 prodi adalah tetap, karena tidak ada tahun sebelumnya.
-Tahun 2013, total mahasiswa pada masing2 prodi adalah prodi 1, totalnya (582 + 447)=1029 --> 582 dari tahun 2012, dan 447 dari tahun 2013
-Tahun 2014, total mhs = 582 + 447 + 521 = 1550

Bagaimana QUERY untuk menjumlahkan (sum) nilai jumlah_mahasiswa (sebagai total_mhs) berdasarkan id_waktu dan id_prodi ?

Terima kasih dan mohon pencerahan

Tanggapan

  • edited October 29
    :D :D :D :D :D :D

    gw kok ngerasa ngadepin soal kuliah yah ... :D

    lagian juga soal dasar yg sederhana ...
    cuma SELECT, WHERE, GROUP BY, SUM.

    berhubung di forum ini sejak jaman kuda gigit batu ... DILARANG KERAS ngerjain soal / tugas / pe-er kuliah member lain ... atau moderator akan bertindak :D
    karena itu sangat tidak mendidik, dan malah menjerumuskan bikin orang jadi males, cuma terima disuapin.

    jadi coba dibuat dulu query nya berdasar perintah yg sudah gw tunjukin.

    kalo masih salah hasilnya, silakan tanyakan lagi.
    dengan begitu, minimal sudah menunjukkan elo sudah berusaha, tapi salah ...
    bukan pe-er minta dikerjakan >:)

    sekian.
  • Maaf labalaba..
    Hehehehe

    Tapi ini bukan soal kuliah.
    Saya juga sudah mencoba tetapi hasil total masih sama seperti hasil jum_mhs

    SELECT id_prodi, id_waktu, sum(jum_mahasiswa) as tot_mhs FROM `mhs` group by id_prodi, id_waktu

    Jika di beri 'where' diisi apa ya ?
    Karena ini menampilkan secara bersamaan semua data di tabel.

    Terima kasih dan maaf..
  • hasil query yg sudah elo buat di atas apa ?
    posting kemari

    lalu hasil yg bener yg elo harapin spt apa ?
    posting kemari
  • Iyaa ini proses posting foto, tpi gagal terus
  • Maaf gambarnya gagal upload terus :

    ini link hasil yg aku jalanin :

    https://photos.google.com/photo/AF1QipPsz1pyoVOQPNJG15VyjnOi_TQBLbfg9WbXXZEQ

    id_prodi______id_waktu_________jum_mhs_______tot_mhs
    -------------------------------------------------
    1 2012 582 582
    1 2013 447 447
    1 2014 521 521

    seperti itu sekilas hasilnya

    maksud yg diharapkan itu :

    id_prodi______id_waktu_________jum_mhs_______tot_mhs
    -------------------------------------------------
    1 2012 582 582
    1 2013 447 1029
    1 2014 521 1550
  • edited October 29
    http://www.diskusiweb.com/discussion/47345/cara-menyisipkan-menyertakan-image-pada-posting/p1

    ada sedikit berubah di menu postimage nya ... tapi masih bisa dipake
    ada perubahan juga attachment di posting ... tapi masih bisa diikuti juga


  • ini hasil yg tadi
  • Yang diharapkan :

  • Terima kasih, mohon pencerahan
  • itu total berjalan

    biasanya dihitung di aplikasi,
    lebih efisien dibanding pake variabel di query.
    soalnya query nya jadi panjang dan lebih susah di debug

    jadi ... putuskan dulu ...
    mau diterusin diproses di database via quey ?
    atau pindah ada di aplikasi ?
  • Maksud nya di aplikasi apa mas ?
  • Sebenarnya itu total masuk ke database. Karena saya akan membangun datawarehouse.

    Tetapi kalo di aplikasi jadinya bagaimana mas ?
    Dan Aplikasi apa yg dimaksud ?
  • edited October 29
    serba salah ...

    aplikasi ini kalo datawarehouse ya aplikasi dashboardnya.
    elo bikin sendiri ? atau pake yg sudah jadi ?

    lalu kalo datawarehouse pun ...
    hasil perhitungan elo itu akan elo jadikan tabel fisik ?
    query perhitungan tsb hanya dijalankan berkala by schedule ?
    lalu jika butuh hasilnya, diambil dari tabel fisik yg sudah jadi ?
    ... kalo iya ... niat elo bener.

    tapi kalo perhitungan itu selalu dijalankan tiap kali butuh data tersebut
    ... kalo iya ... niat elo salah.
  • edited October 29
    SELECT 
    id_prodi ,
    id_waktu ,
    jum_mahasiswa ,
    IF( id_prodi = 1 , @a := @a + jum_mahasiswa ,
    IF( id_prodi = 2 , @b := @b + jum_mahasiswa ,
    @c := @c + jum_mahasiswa )
    ) AS tot_mahasiswa
    FROM `mhs`
    JOIN ( SELECT @a := 0 , @b := 0 , @c := 0 ) inisialisasi
    ORDER BY id_prodi , id_waktu
    query nya sih cuma gitu, cuma mainan variable

    cuma jadi ndak wajar kalo di datawarehouse, query itu dijalankan berulang tiap kali butuh datanya.

    tapi kalo elo gabung dengan :

    CREATE TABLE materialized_sum
    SELECT ...

    atau jika table materialized_sum sudah ada ...

    INSERT INTO materialized_sum ( ... )
    SELECT ...

    baru wajar ...
  • Iyaa yang aku maksud seperti ini :

    "
    lalu kalo datawarehouse pun ...
    hasil perhitungan elo itu akan elo jadikan tabel fisik ?
    query perhitungan tsb hanya dijalankan berkala by schedule ?
    lalu jika butuh hasilnya, diambil dari tabel fisik yg sudah jadi ?
    "
  • Wahhh hasil yang diharapkan benar master dengan query diatas..

    Sebenarnya proses query tersebut saya butuhkan saat proses ETL dari data transaksional menjadi data analisis di datawarehouse itu.
    Proses ETL nya saya menggunakan Pentaho Data Integration. Aku akan coba terapkan ini di proses ETL nya/

    Terimakasih banyak, master
  • ok, kalo elo paham apa yg harus elo lakukan
  • Mas, maaf mau tanya lagi
    Masih seputar hal diatas

    saya ada tabel seperti ini


    Lalu saya tampilkan seperti yg saya harapkan seperti di atas

    SELECT mhsNamaAngkatan , mhsProdiKode , COUNT(IF(mhsJlrrKode NOT IN ('SAJ','SAP'),mhsNiu , NULL)) AS 'JUM_MB_REG' , COUNT(IF(mhsJlrrKode IN ('SAJ','SAP'), mhsNiu, NULL)) AS 'JUM_MB_TRANS' FROM mahasiswa group by mhsNamaAngkatan, mhsProdiKode

    Hasilnya :



    Lalu jika ditambah kolom TOTAL_MHS_REG dengan kode seperti dari masnya tadi :

    SELECT
    id_prodi ,
    id_waktu ,
    jum_mahasiswa ,
    IF( id_prodi = 1 , @a := @a + jum_mahasiswa ,
    IF( id_prodi = 2 , @b := @b + jum_mahasiswa ,
    @c := @c + jum_mahasiswa )
    ) AS tot_mahasiswa
    FROM `mhs`
    JOIN ( SELECT @a := 0 , @b := 0 , @c := 0 ) inisialisasi
    ORDER BY id_prodi , id_waktu

    Bagaimana ya mas menggabungkannya ?
  • Ini hasil penggabungan yg saya lakukan, tapi error karena di IF, field JUM_MB_REG tidak diketahui :

    SELECT
    mhsProdiKode, mhsNamaAngkatan
    , COUNT(IF(mhsJlrrKode NOT IN ('SAJ','SAP'),mhsNiu , NULL)) AS 'JUM_MB_REG'
    , COUNT(IF(mhsJlrrKode IN ('SAJ','SAP'), mhsNiu, NULL)) AS 'JUM_MB_TRANS'
    , IF( mhsProdiKode = 1 , @a := @a + JUM_MB_REG , IF( mhsProdiKode = 2 , @b := @b + JUM_MB_REG , @c := @c + JUM_MB_REG ) ) AS TOT_MHS_REG
    FROM mahasiswa JOIN ( SELECT @a := 0 , @b := 0 , @c := 0 ) inisialisasi group by mhsProdiKode, mhsNamaAngkatan

    cara agar inisialisasi nama 'AS JUM_MB_REG' terbaca di query IF nya itu bagaimana ya?
  • ya iya lah :D
    elo pake alias saat itu juga ...

    @jum_mb_reg := COUNT(IF(mhsJlrrKode NOT IN ('SAJ','SAP'),mhsNiu , NULL)) AS 'JUM_MB_REG'

    yah ... elo tau to kira-kira @jum_mb_reg mesti diapain ? :D
  • Sudah pake seperti itu. Bisa nampil nilai count nya. Tapi ketika di pemanggilan IF tidak terbaca

    Apa jika di IF pemanggilannya menjadi seperti ini ?? :

    IF( mhsProdiKode = 1 , @a := @a + @jum_mb_reg , IF( mhsProdiKode = 2 , @b := @b + @jum_mb_reg , @c := @c + @jum_mb_reg ) ) AS TOT_MHS_REG
  • edited October 29
    iya, emang jadi kaya gitu.

    @ itu kan tanda kalo itu variabel di mysql.

    @jum_mb_reg itu variabel yg menampung hasil count.

    emang hasilnya salah ?
  • Iyaa ...
    Hasilnya NULL
  • SELECT mhsProdiKode, mhsNamaAngkatan , @jum_reg := COUNT(IF(mhsJlrrKode NOT IN ('SAJ','SAP'),mhsNiu , NULL)) AS 'JUM_MB_REG' , @jum_trans := COUNT(IF(mhsJlrrKode IN ('SAJ','SAP'), mhsNiu, NULL)) AS 'JUM_MB_TRANS' , IF( mhsProdiKode = 1 , @a := @a + @jum_reg , IF( mhsProdiKode = 2 , @b := @b + @jum_reg , @c := @c + @jum_reg ) ) AS TOT_MHS_REG FROM mahasiswa JOIN ( SELECT @a := 0 , @b := 0 , @c := 0 ) inisialisasi group by mhsProdiKode, mhsNamaAngkatan

    Hasil TOT_MHS_REG jadi NULL
  • oh, lupa, COUNT itu fungsi agregate, isinya tidak diketahui sampai baris terakhir selesai dibaca.

    ya ndak ada cara lain : subquery.
  • Maksudnya cara lainnya 'subquery' ?
  • edited October 29
    ini maksudnya tidak paham "subquery" atau bagaimana ?
    kok kayanya ndak mungkin :D

    itu ada "titik dua"-nya lho ...
    SELECT 
    MIN(jumlah) AS termuda, MAX(jumlah) AS tertua
    FROM (
    SELECT
    siswa, COUNT(siswa) AS jumlah
    FROM
    tbl_siswa
    GROUP BY
    umur
    ) kelompok_umur
    semacam itu ?
  • Maksudnya gak ngerti, maksud dari bahasa penyampaiannya :D Klo subquery tau.

    Oke, terima kasih banyak
  • Master labalaba,

    Jika saya memakai CREATE TABLE materialized_sum..
    Kemudian select yang dituliskan bagaiamana ?
  • edited November 8
    itu satu perintah yg nyambung.
    bukan CREATE sendiri, lalu SELECT sendiri.
    beneran nyambung.

    jadi hasil SELECT langsung dibuatkan table baru dan semua isinya dimasukan ke table baru tersebut.

    perintah ya kaya yg gw tulis ...

    buat dulu query SELECT sampai beneran dapat hasil yang dimau.
    kalo sudah yakin, tinggal awalnya di tambah :
    CREATE TABLE materialized_sum SELECT ...

    nama table baru : terserah, sesuai kebutuhan.
    tipe field tidak perlu disebut, biasanya langsung auto-detect.
    tapi kalo mau disebut juga boleh.

    dokumentasi : https://dev.mysql.com/doc/refman/5.7/en/create-table-select.html
Sign In or Register to comment.