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

Bagaimana saya bisa menghitung jumlah posting yang memiliki skor suara nol atau positif?

Cara paling sederhana untuk mengecualikan postingan yang total suaranya kurang dari nol adalah seperti ini:

SELECT count(1)
FROM qanda question
JOIN qanda answer ON question.Id = answer.related
WHERE answer.related IS NOT NULL
AND answer.user_id = 2
AND question.free IS NULL
AND question.id not in (
  select post_id
  from votes
  group by post_id
  having sum(value) < 0)

Bagian kuncinya di sini adalah having sum(value) < 0 yang memilih postingan dengan suara negatif bersih.

Dari komentar...

Untuk menemukan pengguna yang memiliki terlalu banyak jawaban "buruk", Anda mungkin harus mengembalikan berapa banyak jawaban "baik" yang mereka buat dan memutuskan apakah secara keseluruhan mereka adalah pengguna "buruk". Misalnya, pengguna yang memiliki 5 jawaban yang semuanya buruk sangat berbeda dengan pengguna dengan 1000 jawaban yang hanya 5 jawaban buruk, meskipun keduanya memiliki 5 jawaban buruk.

Coba ini:

select
    sum(score < 0) bad,
    count(*) total,
    sum(score < 0) / sum(.01) percent_bad
from (
    SELECT coalesce(sum(value), 0) score
    FROM qanda question
    JOIN qanda answer ON question.Id = answer.related
    LEFT JOIN votes ON votes.post_id = answer.id
    WHERE answer.related IS NOT NULL
    AND answer.user_id = 2
    AND question.free IS NULL
    AND answer.timestamp > subdate(now(), 365)
    GROUP BY answer.id
) scores

Beberapa catatan tentang beberapa SQL Kung Fu di sana:

  • di MySQL, benar adalah 1 dan salah adalah 0, jadi dengan menjumlahkan suatu kondisi, Anda menghitung berapa kali itu benar. Ini jauh lebih sederhana untuk dikodekan, dan lebih mudah dibaca, daripada SUM(CASE ...) yang kikuk ekspresi yang dibutuhkan oleh DB lain
  • menyelam hitungan dengan SUM(.01) (yang baru saja saya pikirkan tentang BTW) adalah cara terpendek untuk mendapatkan persentase, karena tidak hanya menyederhanakan ekspresi, tetapi juga menyatukan jawaban untuk mengambang sehingga Anda secara otomatis menghindari pembulatan aritmatika bilangan bulat

Penafian:Kode mungkin tidak dapat dikompilasi atau tidak berfungsi saat dimasukkan ke dalam ponsel saya (tetapi ada kemungkinan besar kode tersebut akan berfungsi)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Perbandingan kode pos MySQL PHP secara khusus jarak

  2. Menjalankan migrasi dengan Rails dalam wadah Docker dengan beberapa instance wadah

  3. Ubah nomor awal kenaikan otomatis?

  4. SQL:bagaimana cara saya memesan berdasarkan bidang jika bukan nol lagi gunakan bidang lain

  5. Memfilter data MySQL di PHP untuk hanya menampilkan data pengguna sesi saat ini?