sql >> Database >  >> RDS >> PostgreSQL

Selecteer meerdere rijwaarden in één rij met clausules met meerdere tabellen

Als elk attribuut slechts één waarde voor een gebruiker heeft, kunt u beginnen met het maken van een schaarse matrix:

SELECT user_id
      ,CASE WHEN attrib_id = 1 THEN value ELSE NULL END AS attrib_1_val
      ,CASE WHEN attrib_id = 2 THEN value ELSE NULL END AS attrib_2_val
  FROM UserAttribute;

Comprimeer vervolgens de matrix met behulp van een aggregatiefunctie:

SELECT user_id
      ,MAX(CASE WHEN attrib_id = 1 THEN value ELSE NULL END) AS attrib_1_val
      ,MAX(CASE WHEN attrib_id = 2 THEN value ELSE NULL END) AS attrib_2_val
  FROM UserAttribute
  GROUP BY user_id;

Als reactie op de opmerking, zoeken op attribuutnaam in plaats van id:

SELECT ua.user_id
      ,MAX(CASE WHEN a.attrib_name = 'attrib1' THEN ua.value ELSE NULL END) AS attrib_1_val
      ,MAX(CASE WHEN a.attrib_name = 'attrib2' THEN ua.value ELSE NULL END) AS attrib_2_val
  FROM UserAttribute ua
  JOIN Attribute a ON (a.attrib_id = ua.attrib_id)
  WHERE a.attrib_name IN ('attrib1', 'attrib2')
  GROUP BY ua.user_id;


  1. hoe te controleren of HikariCP-verbindingspooling werkt of niet in Java?

  2. MySQL relationele databases gebruiken op Fedora 13

  3. Blokkeren, blokkeren, blokkeren op DBA's-deur met SQL Server-blokkering

  4. Verwijder dubbele records uit een tabel zonder pk of id of unieke kolommen in mysql