PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Изберете стойности на няколко реда в един ред с клаузи за множество таблици

Ако всеки атрибут има само една стойност за даден потребител, можете да започнете, като направите разредена матрица:

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;

След това компресирайте матрицата с помощта на агрегатна функция:

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;

В отговор на коментара, търсене по име на атрибут, а не по 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQLAlchemy проверява SSL връзката

  2. Неуспешно зареждане на sql модули в клъстера на базата данни по време на инсталацията на PostgreSQL

  3. Как да наблюдавате PostgreSQL с помощта на Nagios

  4. Ключови неща, които трябва да наблюдавате в PostgreSQL – анализиране на вашето работно натоварване

  5. Вмъкване на NEW.* от общ тригер с помощта на EXECUTE в PL/pgsql