Beste Tactiek Om Fout 3504 Sql Op Te Lossen
September 21, 2021
Aanbevolen: Fortect
Als u te maken krijgt met onoplettendheid 3504 sql, zou deze gebruikershandleiding u moeten helpen.
Foto door John Schnobrich op Unsplash
In dit type artikel zal ik uitleggen waarom de belangrijkste fout is opgetreden [Fout 3504] [SQLState HY000] De geselecteerde niet-geaggregeerde waarde moet deel blijven uitmaken van een gekoppelde groep wanneer ooit een SQL-query wordt uitgevoerd in Teradata. Ik zal de gemeenschappelijke bijdrage aan het probleem beschrijven en de klant laten zien hoe u het in de toekomst kunt voorkomen.
Probleem
Fout 3504 treedt op bij het groeperen van belangrijke infobestanden in Teradata met behulp van de GROUP BY-clausule. Het maakt niet uit, zolang je de DML-onzekerheid (SELECT) of like maar laat vallen. Tijdens DDL-technieken (zoals VIEW) creëer je echter de nieuwe precieze fout. De gemakkelijkste manier om een foutmelding te krijgen is:
SELECTEER WERKNEMER_ID, AVG (SALARIS)MEDEWERKERSBESTELLING 1;
Het eigenlijke doel van de bovenstaande query is om het gemiddelde salaris van praktisch verkopers te berekenen. Dit is echter waarschijnlijk absoluut niet genoeg
Geen GROUP BY nieuws
Wanneer u groepsaspecten gebruikt (zoals SUM, COUNT, You avg), vergeet dan niet om u te helpen de GROUP BY-component te gebruiken om de WHERE-component te vergelijken en dus HAVING / ORDER BY. Het SQL-onderzoek voor de bewerking is precies het volgende:
- SELECTEER
, AVG (attribuut) - UIT tabel1
- JOIN (BINNENVERBINDING // LINKS NAAR RECHTS of als alternatief VOLLEDIGE BUITENVERBINDING) tabel2
- ON table1.attribute komt overeen met table2.attribute
- Over
- GROEP NA
- IS
- BESTEL OP
De uitzondering is dat je ze de GROUP BY-term niet wilt laten gebruiken bij het groeperen van gegevens zonder veel andere attributen te selecteren, maar het is ooit eerder gebruikt.
Aantal ongeldige opties
Probleem Geselecteerd niet-geaggregeerd bedrag moet gedeeltelijk zijn, d.w.z. er kan ook een gerelateerde cirkel plaatsvinden. Misschien hebben ze al een GROUP BY-aanbieding in uw zoekopdracht, en daarom is een soort lijst van misverstanden in de GROUP BY-clausule vaak onvolledig, dat wil zeggen dat niet alle argumenten die met bosfuncties worden gebruikt, zijn opgenomen in de BY-groepsreeks, bijvoorbeeld:
SELECTEER WERKNEMER_ID, AVG (SALARIS)S JAAR, WERKNEMERSWERKNEMER_ID GROEPBESTELLEN 1.2;
In de bovenstaande highlights beheren we na de SELECT-instructie de 2 attributen EMPLOYEE_ID en YEAR, en alleen het EMPLOYEE_ID attribuut hoort bij de GROUP BY-voorwaarde – deze functie zal niet werken.
Oplossing
Gebruik altijd de GROUP BY-clausule voor functies
In de economie worden zoekopdrachten met groeperingsfuncties die geen extra attributen hebben bijna nooit gebruikt, bijvoorbeeld:
SELECTEER TOTAAL (SALARIS)MEDEWERKERS ;
Je kunt er gerust mee spelen of zoeken naar generieke nummers van patiëntnummers van bijvoorbeeld de start van een bedrijf. We hebben typisch meer complexe berekeningen nodig. Denk er daarom in de meeste gevallen aan om GROUP op te nemen met een echte BY-clausule.
Zorg ervoor dat de argumentenlijst van een persoon correct is
Maak er altijd een getal van dat overeenkomt met de argumentenlijst van de SELECT-termen met kwantitatieve kenmerken van het GROUP BY-commando, bijvoorbeeld:
SELECT EMPLOYEE_ID, JAAR, GEMIDDELDE (SALARIS)MEDEWERKERSWERKNEMER_ID GROEP, JAARBESTELLEN 1.2;
Als je het bericht leuk vond, voeg dan een opmerking toe, de volgende zijn enkele of deel het op je Twitter, Facebook, LinkedIn of een andere sociale netwerkwebsite.
Bedankt voor uw!
Probleem
Fout 3504 treedt op terwijl u documenten in Teradata samenvoegt met behulp van de GROUP BY-clausule. Ongeacht of u alleen een DML-query (SELECT) indient of deze via een DDL-functie maakt (zoals VIEW), uw hele gezin krijgt de oude fout. Dit is de gemakkelijkste manier om een nieuwe grote fout te krijgen:
SELECTEER WERKNEMER_ID, AVG (SALARIS)MEDEWERKERSBESTEL DOOR 1;
Het doel van deze zoekopdracht is om het gemiddelde salaris van alle mensen te vinden. Maar je wilt vast wel iets?
Geen GROUP BY-instructie
Aanbevolen: Fortect
Bent u het beu dat uw computer traag werkt? Zit het vol met virussen en malware? Vrees niet, mijn vriend, want Fortect is hier om de dag te redden! Deze krachtige tool is ontworpen om allerlei Windows-problemen te diagnosticeren en te repareren, terwijl het ook de prestaties verbetert, het geheugen optimaliseert en uw pc als nieuw houdt. Wacht dus niet langer - download Fortect vandaag nog!
Wanneer u groeperingsbewerkingen gebruikt (bijvoorbeeld SUM, COUNT, You avg), vergeet dan niet de GROUP BY-clausule te gebruiken tussen alle WHERE-opdrachten en het HAVING- of ORDER BY-resultaat. Het ophalen van de SQL-bewerking gaat als volgt:
- SELECTEER
, AVG (attribuut) - UIT tabel1
- JOIN (INNER JOIN // van links naar RECHTS voor elke FULL OUTER JOIN) tabel2
- ON table1.attribute betekent table2.attribute
- Over
- GROEP NA
- IS
- BESTEL OP
Een uitzondering – de GROUP BY-termen bij het aggregeren van gegevens zonder verschillende andere attributen te gebruiken, gaan nergens heen, maar worden helaas zelden gebruikt.
Aantal ongeldige kenmerken
De storing met geselecteerde niet-geaggregeerde waarden die onderdeel moeten zijn van je huidige onderling verbonden groep kan ook voorkomen in skins waar je al een GROUP BY-clausule in je query hebt, maar ook dit kan betekenen dat de opt- in de lijst met goede redenen in de GROUP BY-clausule is altijd onvolledig, dwz niet alle argumenten die werden gebruikt voor het groeperen van functies waren niet opgenomen in de BY-groepsreeks, bijvoorbeeld:
SELECTEER EMPLOYEE_ID, JAAR, GEMIDDELDE (SALARIS)MEDEWERKERSWERKNEMER_ID GROEPBESTELLEN 1.2;
Zoals hierboven aangegeven, willen we na de SELECT-instructie twee verbindingen EMPLOYEE_ID en YEAR hebben, één en slechts één EMPLOYEE_ID-attribuut om uw GROUP BY-clausule te bevatten – de aanpak werkt niet.
Oplossing
Gebruik altijd de GROUP BY-clausule om functies te groeperen
In de praktijk van zoekresultaten ziet u dat de groeperingsfunctie zonder extra attributen meestal wordt gebruikt, zijn zeer zeldzaam, bijvoorbeeld:
SELECTEER TOTAAL (SALARIS)MEDEWERKERS ;
U bent veilig tijdens of tijdens het diagnosticeren op zoek naar bedragen of wereldwijde nummers, bijvoorbeeld het bestaan dat verband houdt met deze bedrijven uit de uitvinding zelf. We hebben meestal meer lastige berekeningen nodig. Denk er daarom altijd aan om GROUP te verenigen met de BY-clausule.
Zorg ervoor dat de lijst met argumenten zonder vragen correct is
Controleer altijd of de lijst met argumenten overal in de SELECT-clausule overeenkomt met de kwaliteitsverhouding in de GROUP BY get, bijvoorbeeld:
SELECTEER EMPLOYEE_ID, JAAR, GEMIDDELDE (SALARIS)MEDEWERKERSWERKNEMER_ID GROEP, JAARBESTELLEN 1.2;
Als je dit bericht in je buurt leuk vond, aarzel dan niet om het onderstaande commentaar toe te voegen of je huidige bericht te delen op Facebook, Twitter, LinkedIn of een ander sociaal netwerk.
Bedankt allemaal Advanced!
Download deze software en repareer uw pc binnen enkele minuten.
Error 3504 Sql
Fehler 3504 Sql
오류 3504 Sql
Erreur 3504 Sql
Fel 3504 Sql
Errore 3504 Sql
Error 3504 Sql
Oshibka 3504 Sql
Blad 3504 Sql
Erro 3504 Sql