Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm cách nào để đếm số bài viết có điểm bình chọn bằng 0 hoặc dương?

Cách đơn giản nhất để loại trừ các bài đăng có tổng số phiếu bầu nhỏ hơn 0 là như sau:

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)

Phần quan trọng ở đây là having sum(value) < 0 chọn các bài đăng có số phiếu tiêu cực ròng.

Từ nhận xét ...

Để tìm những người dùng có quá nhiều câu trả lời "xấu", bạn có thể nên trả lại bao nhiêu câu trả lời "tốt" mà họ đã trả lời và quyết định xem họ có phải là người dùng "xấu" hay không. Ví dụ:một người dùng có 5 câu trả lời đều không tốt, rất khác với người dùng có 1000 câu trả lời, trong đó chỉ có 5 câu trả lời không tốt, mặc dù cả hai đều có 5 câu trả lời không tốt.

Hãy thử điều này:

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

Một số lưu ý về một số Kung Fu SQL trong đó:

  • trong MySQL, true là 1 và false là 0, do đó, bằng cách tính tổng một điều kiện, bạn đếm xem nó đúng bao nhiêu lần. Điều này đơn giản hơn để viết mã và dễ đọc hơn nhiều so với SUM(CASE ...) vụng về các biểu thức cần thiết bởi các DB khác
  • giảm số lượng theo SUM(.01) (mà tôi chỉ nghĩ đến BTW) là cách ngắn gọn nhất để lấy tỷ lệ phần trăm, vì nó không chỉ đơn giản hóa biểu thức mà còn kết hợp câu trả lời thành float để bạn tự động tránh làm tròn số nguyên

Tuyên bố từ chối trách nhiệm:Mã có thể không được biên dịch hoặc hoạt động như đã được cài đặt trên điện thoại của tôi (nhưng có khả năng hợp lý là nó sẽ hoạt động)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Đặt lại mật khẩu gốc MySQL khi không xác định được mật khẩu hiện tại

  2. Cách đăng dữ liệu lên cơ sở dữ liệu bằng cách sử dụng API Tìm nạp trong React.js

  3. Chuyển đổi giây thành khoảng thời gian có thể đọc được của con người

  4. Nhập dữ liệu vào mysql từ oracle

  5. Chọn hồ sơ theo thời gian trong khoảng thời gian từ 12:00:00 đến 18:00:00 hàng ngày