Dotaz do databáze s group a sum jak použít podmínku

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Username
Člen | 36
+
0
-

Ahoj, v čem dělám chybu v následujícím dotazu do databáze? Když odstraním ->where tak dotaz proběhne v pořádku, ale já potřebuji filtrovat podle kritérií, která jsou v ->where. Díky za pomoc.

<?php
$this->template->muzi = $this->database->table('vysledky')
->where('YEAR(turnaje.zacatek) = ? AND ucastnici.pohlavi_jako_id = ?', $this->rok, 1)
->group('ucastnici_id')
->select('SUM(celkem) AS celkem_sum, ucastnici_id')
->order('celkem_sum DESC');
?>
David Matějka
Moderator | 6445
+
0
-

a hlasi to chybu nebo co?

Username
Člen | 36
+
0
-

Chybová hláška:
SQLSTATE[23000]: Integrity constraint violation: 1052 Column ‚ucastnici_id‘ in field list is ambiguous

David Matějka napsal(a):

a hlasi to chybu nebo co?

CZechBoY
Člen | 3608
+
0
-

Tak ten sloupec upresni. Napr. vysledky.ucastnici_id.

Username
Člen | 36
+
0
-

Funguje, mockrát děkuju za pomoc!

CZechBoY napsal(a):

Tak ten sloupec upresni. Napr. vysledky.ucastnici_id.

Username
Člen | 36
+
0
-

Měl bych na vás ještě jeden dotaz, rozšířil jsem dotaz do databáze o COUNT. Je možné COUNT omezit podmínkou >= 160 (tzn. kolik je hodnot ve sloupci celkem >= 160)? díky za pomoc.

$this->template->muzi = $this->database->table('vysledky')
->where('YEAR(turnaje.zacatek) = ? AND ucastnici.pohlavi_jako_id = ?', $this->rok, 1)
->group('vysledky.ucastnici_id')
->select('SUM(celkem) AS celkem_sum, vysledky.ucastnici_id')
->select('COUNT(celkem) AS pocet, vysledky.ucastnici_id')
->order('celkem_sum DESC');

Editoval Username (18. 1. 2017 18:05)

CZechBoY
Člen | 3608
+
0
-

Ten dotaz vůbec nechápu.
Ty chceš počet účastníků a groupuješ to podle účastníka? To snad bude vždy 1, ne?

Username
Člen | 36
+
0
-

Upravil jsem svůj příspěvek, sloupec celkem obsahuje získaný počet bodů, v SUM sčítám získané body jednotlivých účastníků a rád bych také získal v COUNT kolikrát dosáhl účastník vyššího výsledku než 160 bodů.

CZechBoY napsal(a):

Ten dotaz vůbec nechápu.
Ty chceš počet účastníků a groupuješ to podle účastníka? To snad bude vždy 1, ne?

CZechBoY
Člen | 3608
+
0
-

Muzes to zkusit pres if (nelekni se zmeny z COUNT na SUM)

SUM(IF vysledky.pocet_bodu > 160, 1, 0) kolikrat_vice_nez_160

Editoval CZechBoY (18. 1. 2017 18:59)

Username
Člen | 36
+
0
-

Díky za pomoc, funguje to

CZechBoY napsal(a):

Muzes to zkusit pres if (nelekni se zmeny z COUNT na SUM)

SUM(IF vysledky.pocet_bodu > 160, 1, 0) kolikrat_vice_nez_160