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

MySQL so sánh và loại trừ kết quả đúng cách

Bây giờ tôi nghĩ rằng tôi đã hiểu nó.

Nếu người dùng chỉ có một câu trả lời cho mỗi câu hỏi, thì điều này sẽ hoạt động:

select ua.quid,
       GROUP_CONCAT(IF(uid=1,answer,'') SEPARATOR '') as a1,
       GROUP_CONCAT(IF(uid=20008,answer,'') SEPARATOR '') as a2
from user_answers ua
where importance <> 1 and uid in (1, 20008)
group by ua.quid
having sum(uid = 1) > 0 and
       sum(uid = 20008) > 0 and
       max(case when uid = 1 then answer end) <> max(case when uid = 20008 then answer end);

CHỈNH SỬA:

Tất nhiên, người dùng có thể có nhiều câu trả lời. Điều này đang thúc đẩy tôi tham gia join chứ không phải là cách tiếp cận chỉ tổng hợp. Thật không may, cách tiếp cận như vậy cần một full outer join , mà MySQL không hỗ trợ. Vì vậy, trước tiên hãy thử tổng hợp theo câu trả lời. Bạn chỉ có hai người dùng, vì vậy chúng tôi sẽ xoay vòng các giá trị:

select ua.quid,
       GROUP_CONCAT(IF(user1 > 0, answer, '') SEPARATOR '') as a1,
       GROUP_CONCAT(IF(user20008 > 0, answer, '') SEPARATOR '') as a2
from (select ua.quid, ua.answer,
             max(case when ua.uid = 1 then 1 else 0 end) as user1,
             max(case when ua.uid = 20008 then 1 else 0 end) as user20008
      from user_answers ua
      where importance <> 1 and ua.uid in (1, 20008)
      group by ua.quid, ua.answer
     ) t
where t.user1 = 0 or t.user20008 = 0
group by ua.quid;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cài đặt Kohana trên OpenShift?

  2. PHP / mySQL - cách tìm nạp các hàng lồng nhau vào mảng đa chiều

  3. Tiếp theo:làm thế nào để lập mô hình giảm giá cho các mặt hàng trong cơ sở dữ liệu?

  4. Làm thế nào để sắp xếp kết quả MySQL với các ký tự đầu tiên, ký hiệu sau cùng?

  5. Cách tìm tên bảng mà hình ảnh được chọn ngẫu nhiên