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

MySQL Group_Concat() vs T-SQL String_Agg()

Jednou z funkcí T-SQL představených v SQL Server 2017 je STRING_AGG() funkce. Toto je v podstatě ekvivalent GROUP_CONCAT() MySQL funkce – umožňuje vracet výsledky dotazu jako seznam s oddělovači, nikoli v řádcích.

Mezi těmito dvěma funkcemi je však několik drobných rozdílů.

Tento článek zkoumá některé z hlavních rozdílů v syntaxi mezi těmito funkcemi.

Syntaxe

Za prvé, zde je oficiální syntaxe pro každou funkci.

MySQL – GROUP_CONCAT()

GROUP_CONCAT([DISTINCT] výraz [,výraz ...] [ORDER BY {unsigned_integer | col_name | výraz} [ASC | DESC] [,col_name ...]] [SEPARATOR str_val])

T-SQL – STRING_AGG()

STRING_AGG ( výraz, oddělovač ) [  ] ::=WITHIN GROUP ( ORDER BY  [ ASC | DESC ] )

Rozdíly v syntaxi

Zde jsou tři hlavní rozdíly v syntaxi mezi GROUP_CONCAT() MySQL a STRING_AGG() T-SQL funkce:

  • Výchozí oddělovač :Pravděpodobně nejviditelnějším rozdílem je skutečnost, že STRING_AGG() vyžaduje zadání oddělovače. Pokud nezadáte dva argumenty (druhý z nich je oddělovač), dostanete chybu. S GROUP_CONCAT() MySQL funkce na druhé straně, oddělovač je volitelný argument. Pokud jej nezadáte, použije se ve výchozím nastavení čárka.
  • Pořadí výsledků :Zatímco funkce MySQL i T-SQL umožňují přidat ORDER BY klauzule se syntaxe mírně liší. T-SQL vyžaduje, abyste použili WITHIN GROUP klauzule při objednávání sady výsledků, zatímco MySQL tento požadavek nemá.
  • Odlišné výsledky :MySQL vám umožňuje používat DISTINCT vrátit pouze jedinečné hodnoty. T-SQL tuto možnost neposkytuje.

Níže jsou uvedeny příklady, které tyto rozdíly demonstrují.

Výchozí oddělovač

MySQL – GROUP_CONCAT()

V MySQL nemusíme specifikovat oddělovač. Toto je volitelný argument. Výchozí hodnota je čárka.

SELECT GROUP_CONCAT(Genre) AS ResultFROM Genres;

Výsledek:

+---------------------------------------------- +| Výsledek |+----------------------------------------------+ | Rock,Jazz,Country,Pop,Blues,Hip Hop,Rap,Punk |+--------------------------------- --------------+

T-SQL – STRING_AGG()

T-SQL vyžaduje, abychom specifikovali oddělovač.

SELECT STRING_AGG(Genre, ',') AS ResultFROM Genres;

Výsledek:

Výsledek -------------------------------------------- Rock, Jazz, Country, Pop, Blues, Hip Hop, Rap, Punk

Pokud neurčíme oddělovač, dostaneme chybu:

SELECT STRING_AGG(Genre) AS ResultFROM Genres;

Výsledek:

Chyba:Funkce STRING_AGG vyžaduje 2 argumenty.

Pořadí výsledků

MySQL – GROUP_CONCAT()

Při objednávání sady výsledků v MySQL jednoduše přidejte ORDER BY klauzule jako argument, za kterou následuje sloupec, podle kterého se má řadit, následovaný buď ASC nebo DESC podle toho, zda jej chcete ve vzestupném nebo sestupném pořadí.

POUŽÍVEJTE hudbu;VYBERTE ar.ArtistName JAKO 'Artist', GROUP_CONCAT(al.AlbumName ORDER BY al.AlbumName DESC) JAKO 'Seznam alb'FROM Artists arINNER JOIN Alba alON ar.ArtistId =al.ArtistIdmeGROUP; 

Výsledek:

+------------------------+--------------------- -------------------------------------------------- -----+| Umělec | Seznam alb |+------------------------+---------------------- -------------------------------------------------- -----+| AC/DC | Výkon || Allan Holdsworth | The Sixteen Men of Tain, All Night Wrong || Buddy Rich | Big Swing Face || Devin Townsend | Ziltoid the Omniscient,Epicloud,Casualties of Cool || Iron Maiden | Někde v čase,Pomocný otrok,Piece of Mind,No Modyer for the Dying,Killers || Jim Reeves | Singing Down the Lane || Michael se učí rockovat | Skandinávie,Věčnost,Modrá noc || Skript | Žádný zvuk bez ticha || Tom Jones | Chvála a vina,Dlouho ztracený kufr,Along Came Jones |+------------------------+------------ -------------------------------------------------- --------------+

T-SQL – STRING_AGG()

Při řazení zřetězených výsledků pomocí ORDER BY ,  SQL Server vyžaduje WITHIN GROUP použít klauzuli.

POUŽÍVEJTE hudbu;VYBERTE ar.ArtistName JAKO 'Artist', STRING_AGG(al.AlbumName, ', ') WITHIN GROUP (ORDER BY al.AlbumName DESC) AS 'Album List'FROM Artists arINNER JOIN Alba alON =ar.ArtistId al.ArtistIdGROUP BY ArtistName;

Výsledek:

Seznam alb interpretů ------------------------- ------------------- -------------------------------------------------- --------- Napájení AC/DC Allan Holdsworth Šestnáct mužů z Tainu, Celou noc Špatný Buddy Bohatý Velký Swing Face Devin Townsend Vševěd Ziltoid, Epicloud, Oběti Cool Iron Maiden Somewhere in Time, Powerslave, Piece of Mind, No Prayer for the Dying, KillersJim Reeves Zpívá Down the Lane Michael se učí rockovat Skandinávii, Eternity, Blue Night Scénář Žádný zvuk bez ticha e Tom Jones Chvála a vina, Dlouho ztracený kufr, Along Came Jones 

Odlišné výsledky

MySQL – GROUP_CONCAT()

GROUP_CONCAT() MySQL podporuje DISTINCT klauzule, která umožňuje odstranit duplicitní hodnoty ze sady výsledků.

USE Solutions;SELECT GROUP_CONCAT(DISTINCT TaskName) FROM Tasks;

Výsledek:

+---------------------------------------------- ----------+| GROUP_CONCAT(DISTINCT TaskName) |+------------------------------------------- -------------+| Dělat zahradu,Krmit kočky,Natírat střechu,Odpočívat,Vem psa na procházku |+--------------------------------- -----------------------+

T-SQL – STRING_AGG()

STRING_AGG() T-SQL funkce nepodporuje DISTINCT doložka.

USE Solutions;SELECT STRING_AGG(DISTINCT TaskName, ',') FROM Tasks;

Výsledek:

Chyba:Nesprávná syntaxe poblíž ','.

Podle očekávání dojde k chybě, pokud se pokusíme použít DISTINCT klauzule s STRING_AGG() .


  1. Jak používat MySQL s Deno a Oak

  2. Jak používat FILEGROUPPROPERTY() v SQL Server

  3. Odkaz na tabulku v jiném schématu s vynecháním názvu schématu

  4. Jak vytvořit databázi na serveru SQL pomocí TSQL nebo GUI - SQL Server / TSQL Tutorial část 24