sql >> Database teknologi >  >> RDS >> PostgreSQL

Vælg flere rækkeværdier i en enkelt række med multitable-klausuler

Hvis hver attribut kun har en enkelt værdi for en bruger, kan du starte med at lave en sparsom 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;

Komprimer derefter matrixen ved hjælp af en aggregatfunktion:

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;

Som svar på kommentaren søges efter attributnavn i stedet for 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. Start eller stop mysql-database ved hjælp af java-programmering

  2. Kaldning af en lagret procedure inden for en lagret procedure

  3. Routing med AngularJS og Slim PHP

  4. Afslutningsresultatsæt, men ikke afsluttende PreparedStatement