Menampilkan Himpunan Nilai dengan Pengurutan Lain - MySQL Dasar #36

Disini Anda akan belajar untuk mengurutkan suatu himpunan nilai menggunakan nilai - nilai yang tidak Anda pilih. Anda bisa menggunakan kolom-kolom pada klausa ORDER BY yang tidak ada didalam daftar keluaran kolom.

Daftar isi : Pengurutan Hasil Query 


MariaDB [root93]> SELECT t, srcuser,
    -> CONCAT(FLOOR((ukuran+1023)/1024),'K') AS ukuran_dlm_K
    -> FROM mail
    -> WHERE ukuran >10000
    -> ORDER by ukuran_dlm_K;
+---------------------+---------+--------------+
| t                   | srcuser | ukuran_dlm_K |
+---------------------+---------+--------------+
| 2021-10-13 10:36:44 | tricia  | 19K          |
| 2021-10-13 10:43:39 | gene    | 22K          |
| 2021-10-13 10:40:45 | tricia  | 234K         |
| 2021-10-13 10:41:27 | gene    | 32K          |
| 2021-10-13 12:32:41 | barb    | 57K          |
| 2021-10-13 10:40:07 | barb    | 96K          |
+---------------------+---------+--------------+
6 rows in set (0.00 sec)

Untuk menghasilkan urutan yang diinginkan, Anda bisa menggunakan ukuran numerik aktual untuk pengurutan

MariaDB [root93]> SELECT t, srcuser,
    -> CONCAT(FLOOR((ukuran+1023)/1024),'K') AS ukuran_dlm_K
    -> FROM mail
    -> WHERE ukuran >10000
    -> ORDER by ukuran;
+---------------------+---------+--------------+
| t                   | srcuser | ukuran_dlm_K |
+---------------------+---------+--------------+
| 2021-10-13 10:36:44 | tricia  | 19K          |
| 2021-10-13 10:43:39 | gene    | 22K          |
| 2021-10-13 10:41:27 | gene    | 32K          |
| 2021-10-13 12:32:41 | barb    | 57K          |
| 2021-10-13 10:40:07 | barb    | 96K          |
| 2021-10-13 10:40:45 | tricia  | 234K         |
+---------------------+---------+--------------+
6 rows in set (0.00 sec)

Dimisalkan Anda tabel roster berikut :

MariaDB [root93]> CREATE TABLE roster
    -> (
    -> nama CHAR(30),
    -> nomor_tim CHAR(3)
    -> );
Query OK, 0 rows affected (0.31 sec)

MariaDB [root93]> INSERT INTO roster (nama, nomor_tim) VALUES('Ahmad',29);
Query OK, 1 row affected (0.06 sec)

MariaDB [root93]> INSERT INTO roster (nama, nomor_tim) VALUES('Dea',0);
Query OK, 1 row affected (0.07 sec)

MariaDB [root93]> INSERT INTO roster (nama, nomor_tim) VALUES('Jefri',00);
Query OK, 1 row affected (0.10 sec)

MariaDB [root93]> INSERT INTO roster (nama, nomor_tim) VALUES('Lena',8);
Query OK, 1 row affected (0.06 sec)

MariaDB [root93]> INSERT INTO roster (nama, nomor_tim) VALUES('Gina',47);


Masalah terjadi ketika Anda mencoba untuk mengurutkan tabel berdasarkan nomor tim. Jika nilai angka - angka pada tabel diatas disimpn sebagai string maka nilai akan diurutkan secara leksikal, dan pengurutan leksikal berbeda dengan pengurutan numerik. Ini akan berlaku untuk pengurutan menaik yang secara default akan diterapkan ketika pengurutan menurun DESC tidak deskripsikan

MariaDB [root93]> SELECT nama, nomor_tim FROM roster ORDER BY 2;
+-------+-----------+
| nama  | nomor_tim |
+-------+-----------+
| Dea   | 0         |
| Jefri | 0         |
| Ahmad | 29        |
| Gina  | 47        |
| Lena  | 8         |
+-------+-----------+


Perhatikan pada hasil query diatas bahwa nilai 47 dan 8 tidak terurut. Hal ini dengan mudah bisa diselesaikan. Anda bisa menampilkan nilai - nilai string, tetapi menggunakan nilai - nilai numerik untuk mengurutkannya, Anda hanya perlu menambahkan nol pada nilai - nilai nomor_tim untuk memaksa konversi string ke numerik

MariaDB [root93]> SELECT nama, nomor_tim FROM roster ORDER BY nomor_tim+0;
+-------+-----------+
| nama  | nomor_tim |
+-------+-----------+
| Dea   | 0         |
| Jefri | 0         |
| Lena  | 8         |
| Ahmad | 29        |
| Gina  | 47        |
+-------+-----------+
5 rows in set (0.00 sec)

Hal yang sama juga berlaku. Anda bisa mengurutkan berdasarkan nilai - nilai kolom, bukan berdasarkan nilai- nilai komposit yang ditayangkan

MariaDB [root93]> SELECT t, CONCAT(srcuser, '@',srchost) AS pengirim,
    -> ukuran FROM mail
    -> WHERE ukuran > 10000
    -> ORDER BY srchost, srcuser;
+---------------------+---------------+--------+
| t                   | pengirim      | ukuran |
+---------------------+---------------+--------+
| 2021-10-13 10:36:44 | tricia@mars   |  19263 |
| 2021-10-13 12:32:41 | barb@saturn   |  58274 |
| 2021-10-13 10:41:27 | gene@saturn   |  32682 |
| 2021-10-13 10:43:39 | gene@saturn   |  22332 |
| 2021-10-13 10:40:45 | tricia@saturn | 239238 |
| 2021-10-13 10:40:07 | barb@venus    |  98161 |
+---------------------+---------------+--------+
6 rows in set (0.00 sec)

Dimisalkan bahwa Anda memiliki sebuah tabel nama yang memuat nama - nama depan dan nama-nama belakang.

MariaDB [root93]> CREATE TABLE nama
    -> (nama_belakang VARCHAR(30),
    -> nama_depan VARCHAR(30)
    -> );
Query OK, 0 rows affected (0.28 sec)

MariaDB [root93]> INSERT INTO nama (nama_belakang, nama_depan) VALUES('Biru','Siti');
Query OK, 1 row affected (0.05 sec)

MariaDB [root93]> INSERT INTO nama (nama_belakang, nama_depan) VALUES('Coklat','Hadi');
Query OK, 1 row affected (0.10 sec)

MariaDB [root93]> INSERT INTO nama (nama_belakang, nama_depan) VALUES('Merah','Putri');
Query OK, 1 row affected (0.05 sec)

MariaDB [root93]> INSERT INTO nama (nama_belakang, nama_depan) VALUES('Putih','Alex');
Query OK, 1 row affected (0.07 sec)

MariaDB [root93]> INSERT INTO nama (nama_belakang, nama_depan) VALUES('Putih','Devan');
Query OK, 1 row affected (0.11 sec)

MariaDB [root93]> SELECT * FROM nama;
+---------------+------------+
| nama_belakang | nama_depan |
+---------------+------------+
| Biru          | Siti       |
| Coklat        | Hadi       |
| Merah         | Putri      |
| Putih         | Alex       |
| Putih         | Devan      |
+---------------+------------+
5 rows in set (0.00 sec)

Untuk menampilkan rekaman - rekaman yang diurutkan berdasarkan nama belakang terlebih dahulu, query yang diperlukan cukup sederhana ketika kolom - kolom ditampilkan secara terpisah.

MariaDB [root93]> SELECT nama_belakang, nama_depan FROM nama
    -> ORDER by nama_belakang, nama_depan;
+---------------+------------+
| nama_belakang | nama_depan |
+---------------+------------+
| Biru          | Siti       |
| Coklat        | Hadi       |
| Merah         | Putri      |
| Putih         | Alex       |
| Putih         | Devan      |
+---------------+------------+
5 rows in set (0.00 sec)

Tetapi kemudian, bagaimana Anda mengurutkan nama - nama sehingga nama-nama tersebut terurut berdasarkan nama belakang ? jawabanya adalh dengan menampilkan nama-nama gabungan seperti berikut :

MariaDB [root93]> SELECT CONCAT(nama_depan,' ',nama_belakang) AS nama_penuh
    -> FROM nama
    -> ORDER by nama_belakang, nama_depan;
+-------------+
| nama_penuh  |
+-------------+
| Siti Biru   |
| Hadi Coklat |
| Putri Merah |
| Alex Putih  |
| Devan Putih |
+-------------+
5 rows in set (0.00 sec)

Anda juga bisa menggunakan alias kolom untuk mengurutkan nama gabungan pada query diatas.

Jika misalanya Anda menginginkan untuk menuliskan query yang mengurutkan nilai - nilai yang tak ingin Anda tampilkan, maka hal ini dapat bermasalah jika kolom-kolom yang diurutkan merupakan ekspresi dan Anda menggunakan versi MySQL lama

Sebagai contoh, untuk menuliskan sebuah query yang menampilkan nama-nama dari tabel, nama dengan nama-nama terpanjang ditampilkan terlebih dahulu.

MariaDB [root93]> SELECT CONCAT(nama_depan,' ',nama_belakang) AS nama
    -> FROM nama
    -> ORDER BY LENGTH(CONCAT(nama_depan,' ',nama_belakang)) DESC;
+-------------+
| nama        |
+-------------+
| Hadi Coklat |
| Putri Merah |
| Devan Putih |
| Alex Putih  |
| Siti Biru   |
+-------------+
5 rows in set (0.00 sec)

Pada MySQL versi lama Anda perlu menempatkan ekspresi pada daftar keluaran dan menggunakan Alias Kolom untuk mengurutkannya seperti contoh berikut;

MariaDB [root93]> SELECT CONCAT(nama_depan,' ',nama_belakang) AS nama_lengkap,
    -> LENGTH(CONCAT(nama_depan,' ',nama_belakang)) AS panjang
    -> FROM nama
    -> ORDER by panjang DESC;
+--------------+---------+
| nama_lengkap | panjang |
+--------------+---------+
| Hadi Coklat  |      11 |
| Putri Merah  |      11 |
| Devan Putih  |      11 |
| Alex Putih   |      10 |
| Siti Biru    |       9 |
+--------------+---------+
5 rows in set (0.00 sec)

Atu mengakses kolom keluaran dengan menuliskan posisi kolomya seperti berikut

MariaDB [root93]> SELECT CONCAT(nama_depan,' ',nama_belakang) AS nama_lengkap,
    -> LENGTH(CONCAT(nama_depan,' ',nama_belakang)) AS panjang
    -> FROM nama
    -> ORDER by 2 DESC;
+--------------+---------+
| nama_lengkap | panjang |
+--------------+---------+
| Hadi Coklat  |      11 |
| Putri Merah  |      11 |
| Devan Putih  |      11 |
| Alex Putih   |      10 |
| Siti Biru    |       9 |
+--------------+---------+
5 rows in set (0.00 sec)

Baca Selanjutnya : Pengurutan dan Nilai NULL - MySQL Dasar #37

0 Response to "Menampilkan Himpunan Nilai dengan Pengurutan Lain - MySQL Dasar #36"

Post a Comment

Komentar yang Anda kirim akan terlebih dahulu di moderasi oleh Admin