sql >> Databáze >  >> RDS >> Mysql

mysql - Použití vnějšího spojení na komplexní příkaz

Napadá mě jen jeden způsob, jak toho dosáhnout. S kombinací GROUP_CONCAT a SUBSTRING_INDEX na váš aktuální pracovní dotaz. Příklad dotazu níže:

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;

Testoval jsem dotaz i v houslích http://sqlfiddle.com/#!9 /54ce8/33

Trochu vysvětlení:

  1. GROUP_CONCAT přes jméno a skóre s přidáním ORDER BY podmínka - všimněte si, že ORDER BY musí být identické v obou GROUP_CONCAT .
  2. SUBSTRING_INDEX abyste získali první hodnotu oddělenou čárkou (,) v poli.


  1. Řídké sloupce v SQL Server:Dopad na čas a prostor

  2. Profilování databáze v IRI Workbench

  3. Jak GET_FORMAT() funguje v MariaDB

  4. Vytvoření spouštěče s příkazem case