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

Odstraňte duplicitní řádky v příkazu SELECT PostgreSQL

PostgreSQL aktuálně nepovoluje nejednoznačné GROUP BY příkazy, kde jsou výsledky závislé na pořadí, ve kterém je tabulka naskenována, použitém plánu atd. Takto standard říká, že by to mělo fungovat AFAIK, ale některé databáze (jako MySQL verze starší než 5.7) umožňují volnější dotazy, které pouze vyberou první hodnotu vyskytující se u prvků objevujících se v SELECT seznamu, ale ne v GROUP BY .

V PostgreSQL byste měli použít DISTINCT ON pro tento druh dotazu.

Chcete napsat něco jako:

SELECT DISTINCT ON (anwendung.name) anwendung.name, autor.entwickler
FROM author 
left join anwendung on anwendung.name = autor.anwendung;

(Syntaxe opravena na základě následného komentáře)

Je to trochu jako ANY_VALUE(...) MySQL 5.7 pseudofunkce pro group by , ale obráceně - říká, že hodnoty v distinct on klauzule musí být jedinečná a pro sloupce je přijatelná jakákoli hodnota ne specifikováno.

Pokud neexistuje ORDER BY , neexistuje žádná záruka, jaké hodnoty jsou vybrány. Obvykle byste měli mít ORDER BY pro předvídatelnost.

Bylo také uvedeno, že použití agregace jako min() nebo max() by fungovalo. I když je to pravda – a povede to ke spolehlivým a předvídatelným výsledkům, na rozdíl od použití DISTINCT ON nebo nejednoznačné GROUP BY - Má vysoké náklady na výkon kvůli nutnosti dodatečného třídění nebo agregace a funguje pouze pro ordinální datové typy.



  1. MySQL ISNULL() Vysvětleno

  2. Podmíněný agregační dotaz se skupinou podle

  3. Salesforce SOQL ze serveru SQL Server

  4. Jak získat zřetelný seznam slov používaných ve všech záznamech pole pomocí MS SQL?