Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana saya bisa menghitung dan mengelompokkan kolom secara terpisah dengan MySQL?

Saya tahu Anda berjuang dengan banyak hal pada saat yang sama, tetapi jawaban terbaik memecahkan masalah yang ikegami cepat berlalu dalam perjalanannya untuk melakukannya di Perl:

Orang sering melakukan lebih dari yang mereka butuhkan di tingkat aplikasi karena mereka tidak pernah belajar melakukan hal yang benar dalam database (seperti pertanyaan lain yang lebih baik dijawab oleh kueri SQL yang sesuai daripada Perl). Namun, selain itu, banyak orang melakukan itu karena mereka tidak dapat mengubah skema. Heuristik sosial, seperti aplikasi bir yang tepat, terkadang memuluskan jalan itu. Sedikit kerja meyakinkan orang-orang database terbayar dalam kelipatan nanti. Dan, selain itu, "pengembang tumpukan penuh" sering kali mengabaikan penggunaan database yang canggih.

Saya tidak akan membuat siapa pun membaca Database in Depth C.J. Date , tetapi ada banyak nilai dalam mendapatkan skema yang benar. Benar, maksud saya itu memaksakan paling sedikit usaha dan kompleksitas pada penggunaannya. Segalanya harus mudah, dan Anda tidak perlu mengatur ulang hal-hal ini di tingkat aplikasi.

Anda ingin menghitung berapa kali setiap jawaban dipilih. Menghitung adalah sesuatu yang dilakukan database dengan sangat baik, jadi biarkan database melakukannya.

Anda memiliki beberapa pertanyaan. Pertanyaan memiliki jawaban yang beragam. Survei mengelompokkan serangkaian pertanyaan. Orang-orang menanggapi survei dengan mengaitkan jawaban mereka dengan pertanyaan.

Berikut adalah desain skema sederhana (dan beberapa orang database akhirnya akan muncul dan memberi tahu saya bahwa saya tidak melakukannya dengan benar, tapi tidak apa-apa). Triknya adalah tidak ada yang harus memiliki banyak kolom yang tidak digunakan. Semuanya hadir dalam paket kecil yang rapi ("hubungan" dalam "database relasional") yang mudah dihubungkan ke hal-hal lain melalui "kunci asing" (mis. question_id untuk memetakan jawaban atas pertanyaan). Jawaban, misalnya, akan memiliki beberapa baris untuk question_id yang sama .

Jika seseorang ingin datang dengan alat pemodelan mewah dan membuat gambar, lakukanlah. Saya menandai ini sebagai wiki komunitas.

Table: Questions
   id
   text

Table: Answers
   id
   text
   question_id

Table: Surveys
   id 
   title

Table: SurveyQuestionSet
   id
   survey_id
   question_id   

Table: Respondent
   id
   text

Table: Response
   id
   respondent_id
   survey_id
   question_id
   answer_id

Setelah dipetakan dan dinormalisasi dengan benar (baca formulir normal ), sangat mudah untuk mendapatkan data yang Anda inginkan dengan SELECT. Ideal dari normalisasi adalah tidak mengulangi informasi atau membiarkannya masuk ke keadaan yang tidak konsisten. Dalam bentuk ini, banyak hal menjadi lebih mudah dilakukan.

Dan, jika Anda ingin mempraktikkan hal seperti itu, Stackoverflow Data Explorer adalah kumpulan data kehidupan nyata yang dinormalisasi dengan apa yang saya sajikan di sini.

Sekarang Anda cukup menghitung berapa kali answer_id muncul untuk kombinasi tertentu dari survei dan pertanyaan. Penggunaan GROUP BY melakukan semua pekerjaan untuk Anda. Anda tidak perlu lagi mengulangi baris dengan melihat puluhan kolom yang tidak digunakan mencoba mencari cara untuk menghitungnya. Tidak hanya itu, tetapi Anda dapat membuat hal-hal ini tampilan , yang berarti Anda menulis kueri sekali dan database berpura-pura bahwa hasilnya adalah tabel. Anda kemudian dapat dengan mudah menanyakan tampilan (jadi semua JOIN s dan juga disembunyikan), yang jauh lebih sederhana. Prosedur tersimpan juga sering diabaikan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:Cara terbaik untuk menyimpan alamat MAC?

  2. Pilih baris terpisah dari dua tabel, pesan berdasarkan tanggal

  3. Gabung kiri kondisi ON DAN sintaks kondisi lain dalam Doktrin

  4. Cara membuat profil pengguna dengan PHP dan MySQL

  5. Bisakah Anda menggunakan beberapa kolom untuk kueri yang tidak ada?