Hogy lenne célszerű ezt az SQL kérést összeállítani?
Most kezdtem ismerkedni az SQL nyelvvel, de belefutottam egy viszonyleg komplikáltabb lekérdezésbe, ami nem nagyon akar menni.
Szóval itt van a táblám: https://pastebin (pont) com/JgE8bKQH
Azokat a sorokat keresem, ahol az OVER értéke 0, de nem biztos, hogy ilyen van. HA nincs, akkor kellenének azok a sorok, ahol az UP értéke 1 és ezen belül DIST értéke a legkisebb ÉS a DOWN értéke 1 és ezen belül a DIST értéke a legkisebb.
Tehát a fenti táblából az ID = 1 és 12 kellene mivel ezeknél az OVER = 1, de ha ezek nem lennének OVER = 1, akkor azID = 6 és 9 kellene.
Nem megoldást keresek (bár igazából az se lenne rossz :D), hanem inkább a kérés logikájára lennék kíváncsi, hogy hogyan lenne célszerű felépíteni. IF-es struktúrát még nem írtam, és az sem világos, hogy tudom egy kérésben a DOWN = 1 és UP = 1- es filtert beletenni.
Akik SQL-lel foglalkoznak, azok szerint, ez a feladat mennyire számít komplexnek?
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
Az IF-et nem az SQL-ben szokták használni, hanem a meghívó nyelvben.
De ezt a feladatot meg lehet oldani valamilyen SQL trükkel egy darab SQL lekérdezéssel is:
SET @OVER_0_COUNT = (SELECT COUNT(*) FROM items WHERE (OVER = 0));
(SELECT * FROM items WHERE (@OVER_0_COUNT > 0) AND (OVER = 0))
UNION
(SELECT * FROM items WHERE (@OVER_0_COUNT = 0) AND (UP = 1) AND (DIST = (SELECT MIN(DIST) FROM items WHERE (UP = 1))))
UNION
(SELECT * FROM items WHERE (@OVER_0_COUNT = 0) AND (DOWN = 1) AND (DIST = (SELECT MIN(DIST) FROM items WHERE (DOWN = 1))));
Köszi szépen a választ, van egy-két kulcsszó, amit nem ismertem, amiknek mindenképpen utána nézek. Mivel nagyon gyorsan kellett a megoldás, és mivel már a példámban szereplő táblázat is egy relative komplex query eredménye, úgy döntöttem, hogy a táblázatot beolvasom egy pandas dataframe-be (pythonban fejlesztek) és azon csinálom további filterelést.
Köszi szépen mégegyszer!
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!