Mysql
 sql >> Baza danych >  >> RDS >> Mysql

mysql - Stosowanie zewnętrznego sprzężenia do złożonej instrukcji

Mogę wymyślić tylko jeden sposób, aby to osiągnąć. Z kombinacją GROUP_CONCAT i SUBSTRING_INDEX w bieżącym zapytaniu roboczym. Przykładowe zapytanie poniżej:

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;

Przetestowałem zapytanie również na skrzypcach http://sqlfiddle.com/#!9 /54s8/33

Trochę wyjaśnienia:

  1. GROUP_CONCAT nad nazwą i wynikiem z dodatkiem ORDER BY warunek - zwróć uwagę, że ORDER BY musi być identyczny w obu GROUP_CONCAT .
  2. SUBSTRING_INDEX aby uzyskać pierwszą wartość oddzieloną przecinkiem (,) w polu.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Poprawna konfiguracja MySQL dla pliku Database.yml Ruby on Rails

  2. Korzystanie z Magento API v/s zwykłego MySQL

  3. Jak skonfigurować Tomcata do połączenia z MySQL?

  4. PHP:echo liczby duplikatów w tabeli według najczęściej używanych

  5. Wyniki MySQL jako lista oddzielona przecinkami