Ahojte,
mam takuto tabulku (aj s ukazkovymi hodnotami):
http://files.getdropbox.com/u/80731/db.png
Je to tabulka vysledkov hadzania sipok v jednej sutazi. Vyznam stlpcov je samovravny. Sutaz sa kona kazdy mesiac (stlpce month, year) a prebieha vo viacerych kolach (stplec round) .
Uz som z nej vytiahol kopu statistik a prehladov, no teraz som narazil na jeden problem:
Vytiahnite uzivatelov, ktori maju najvacsi pocet vyhratych kol.
(vyhrate kolo - najviac bodov z riadkov s rovnakymi stplcami round,month a year)
p.s. viacerymi cyklami a pomocnymi poliami cez php to problem nie je... no rad by som to nehal iba na sql server
Fórum › MySQL
Pomoc s jednym query
grupovanie pouzivam casto, no teraz ho neviem akosi napasovat...
Bo ono treba:
1. najst vytazov jednotlivych kol
2. zratat pocet vytazstiev kazdeho uzivatela
3. zoradit vysledok a limitovat na 5
no neviem ci to pojde v jednom query
dalaman
SELECT points.user_uid AS user_uid, COUNT(winners_points.points) AS winnings
FROM tabulka AS points
LEFT JOIN (
SELECT year, month, round, MAX(points) AS points
FROM points
GROUP BY year, month, round
) AS winners_points ON points.year = winners_points.year AND points.month = winners_points.month AND
points.round = winners_points.round AND points.points = winners_points.points
GROUP BY points.user_uid
ORDER BY winnings DESC
LIMIT 5
Poddotazem se vytáhnou vítězné body jednotlivých kol a pak už se jen zjistí, kolikrát který hráč vyhrál. Docela zběsilé a obával bych se výkonnosti při hodně řádcích v tabulce, ale je to jeden dotaz :o)
SUPEEEEER
mal som nieco velmi podobne.. Nevedel som zistit kde je chyba a som zistil prave ze ked vykonam toto query:
SELECT year, month, round, MAX(points) AS points
FROM darts_points
GROUP BY year, month, round
tak mi vrati user_uid z ineho riadku ako naslo MAX(points) - asi najskor vytiahne prve user_uid a az potom najde maximum
Ty si bol sikovnejsi a vytiahol si si tu hodnotu cez podmienky vo WHERE
GOOD WORK
Vysledny kod po dopracovani (o jeden join viac - pre zistenie mena usera) :D
SELECT darts_user.name,bestWinners.winnings FROM
(
SELECT points.user_uid AS user_uid, COUNT(winners_points.maxPoints) AS winnings
FROM darts_points AS points
LEFT JOIN
(
SELECT year, month, round, MAX(points) AS maxPoints
FROM darts_points points
GROUP BY year, month, round
) AS winners_points
ON points.year = winners_points.year AND points.month = winners_points.month AND
points.round = winners_points.round AND points.points = winners_points.maxPoints
GROUP BY points.user_uid
) bestWinners INNER JOIN darts_user
ON darts_user.uid = bestWinners.user_uid
ORDER BY bestWinners.winnings DESC
LIMIT 5
p.s. je to db do 1000 zaznamov... cize vykonnost netreba moc riesit
Zjistit počet nových příspěvků
Přidej příspěvek
Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
Uživatelé prohlížející si toto vlákno
Uživatelé on-line: 0 registrovaných, 21 hostů
Podobná vlákna
Session vs. Query do DB — založil jerkyrama
Query string — založil 3bit
Okamžitá QUERY — založil Jetti
Error: query was empty — založil Ilja
Query stringvysvětlení kodu — založil Robb
Moderátoři diskuze