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

mysql - Прилагане на външно съединение към сложен оператор

Мога да се сетя само за един начин да постигна това. С комбинация от GROUP_CONCAT и SUBSTRING_INDEX на текущата ви работна заявка. Примерна заявка по-долу:

SELECT    person_id,
          SUBSTRING_INDEX(GROUP_CONCAT(a.name ORDER BY a.score DESC),',',1) sname, 
          SUBSTRING_INDEX(GROUP_CONCAT(a.score ORDER BY a.score DESC),',',1) max_score FROM 
(SELECT   people.person_id,
          names.name,
          CASE 
          WHEN people.person_default_name_id=names.name_id AND language_scripts.script_id = '1' THEN 3
          WHEN names.language_id = '1' THEN 2
          WHEN language_scripts.script_id = '1' THEN 1
          ELSE 0
          END AS score
FROM      `people` 
LEFT JOIN `names` ON names.person_id=people.person_id
LEFT JOIN `languages` ON names.language_id = languages.language_id
LEFT JOIN `language_scripts` ON languages.language_id = language_scripts.language_id) a 
GROUP BY person_id;

Тествах заявката и във fiddle http://sqlfiddle.com/#!9 /54ce8/33

Малко обяснение:

  1. GROUP_CONCAT над името и резултата с добавяне на ORDER BY условие - имайте предвид, че ORDER BY трябва да е идентичен и в двата GROUP_CONCAT .
  2. SUBSTRING_INDEX за да получите първата стойност, разделена със запетая (,) в полето.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. как да избягате разделителя от съдържанието на колоната, когато експортирате csv

  2. MySQL PHP - ИЗБЕРЕТЕ КЪДЕ id =array()?

  3. Настройки на mysql за часова зона на Codeigniter

  4. Отдалечен достъп до Mysql IP

  5. Групиране на MySQL datetime в интервали, независимо от часовата зона