sql >> Database >  >> RDS >> Mysql

MySQL-resultaten correct vergelijken en uitsluiten

Nu denk ik dat ik het begrijp.

Als de gebruikers slechts één antwoord voor elke vraag hebben, dan zou dit moeten werken:

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);

BEWERKEN:

Natuurlijk kunnen gebruikers kunnen meerdere antwoorden hebben. Dit duwt me in de richting van een join benadering in plaats van een geaggregeerde benadering. Helaas heeft zo'n aanpak een full outer join nodig , die MySQL niet ondersteunt. Laten we dus eerst proberen te aggregeren op antwoord. Je hebt maar twee gebruikers, dus we draaien de waarden om:

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. Selecteer de meest recente rij met GROUP BY in MySQL

  2. 2 Functies die de naam van de maand retourneren van een datum in MySQL

  3. Onjuiste tekenreeksfout bij het toevoegen van emoji aan een database via een formulier

  4. VBA's functie voor het wijzigen van hoofdletters