Výpis společností dle počtu zaměstnanců – MySQL – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Výpis společností dle počtu zaměstnanců – MySQL – Fórum – Programujte.comVýpis společností dle počtu zaměstnanců – MySQL – Fórum – Programujte.com

 

null_while
~ Moderátor
+6
Věrný člen
21. 10. 2012   #1
-
0
-

V tabulce staff jsou vsichni zamestnanci a komu patri dany zamestnanec je rozliseno pomoci
account_id, tudiz kdyz vezmeme vsechny radky z tabulky staff, kde account_id je rovno např. 1
zjistíme kolik má daný uživatel (s account_id 1) zaměstnanců.

Ve výsledku chci vypisovat všechny uživatele dle počtu zaměstnanců sestupně, tabulka account_assets ukládá přehled o majetku a nemá s tím nic společného. Tabulky tedy lze propojit pomocí account_id, který mají všechny stejné.

Výsledkem má být dotaz, který získá žebříček hráčů dle počtu zaměstnanců.

Tabulky:

account - ukládá account_id, informace o účtu
staff - ukládá všechny zaměstnance, zaměstnance jednoho hráče (WHERE account_id = (konkrétní)
account_assets - majetek účtu (nesouvisí s příkladem)

Nějak se nemůžu dotoužit k výsledku, a proto budu rád, když mi sdělíte Vaše výtvory a efektivní řešení.

Šel jsem na to přes: 

SELECT COUNT(*)
AS MAX FROM staff,

ale přišlo mi to moc neefektivní.

Nahlásit jako SPAM
IP: 84.16.103.–
WEBNIA.cz - tvorba webových stránek
KIIV
~ Moderátor
+43
God of flame
21. 10. 2012   #2
-
0
-

tak muzes mit u firmy pocet a ten zmenit jen kdyz se nekdo prida nebo smaze..

Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
null_while
~ Moderátor
+6
Věrný člen
21. 10. 2012   #3
-
0
-

Taky mě to napadlo, jako nejjednodušší řešení a nejrychlejší, jen jsem myslel, že to dotaz o moc víc nebrzdil.

Nahlásit jako SPAM
IP: 84.16.103.–
WEBNIA.cz - tvorba webových stránek
null_while
~ Moderátor
+6
Věrný člen
21. 10. 2012   #4
-
0
-

   

SELECT *,
  (SELECT COUNT(*) FROM staff WHERE account_id = account.account_id) AS MAX 
FROM account 
LEFT JOIN account_assets ON account.account_id = account_assets.account_id 
ORDER BY MAX DESC

něco takového, jenže se bojím, aby to nenabralo moc zpoždění a nezatěžovalo server.

Nahlásit jako SPAM
IP: 84.16.103.–
WEBNIA.cz - tvorba webových stránek
KIIV
~ Moderátor
+43
God of flame
21. 10. 2012   #5
-
+1
-
Zajímavé

zalezi kolik tam toho mas... nebylo by od veci udelat si treba benchmark s tisicovkou firem a ke kazdy 10000 zamestnancu a otestovat ruzne dotazy...

a pocitat ze kazdy dotaz neco zabere ... je mozne ze join vyjde i rychleji nez pro kazdou firmu delat samostatny dotaz...

to uz by bylo lepsi vytahnout si s limitem pocty, a pak si dalsim requestem vytahnout firmy ke konkretnim ID firem

Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
null_while
~ Moderátor
+6
Věrný člen
21. 10. 2012   #6
-
0
-

Předpokládá se max. 50-100 zaměstnanců k max. 1000 firmám. Přičemž tyto hodnoty jsou opravdu maximální a hlavně by se dosáhli v průběhu několika měsíců. Zatím jde o stovky firem a desítky zaměstnanců, někdy i < 10. 

Nahlásit jako SPAM
IP: 84.16.103.–
WEBNIA.cz - tvorba webových stránek
KIIV
~ Moderátor
+43
God of flame
21. 10. 2012   #7
-
+1
-
Zajímavé

to by mel byt problem az pri vetsi zatezi.. a mozna pokud se bude joinovat spatnym smerem

Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
null_while
~ Moderátor
+6
Věrný člen
21. 10. 2012   #8
-
0
-

Jojo, projedu to v admineru a uvidím. Díky za nápady, tipy.

Nahlásit jako SPAM
IP: 84.16.103.–
WEBNIA.cz - tvorba webových stránek
Jasper0
Věrný člen
21. 10. 2012   #9
-
+1
-
Zajímavé

   

Select account_id, count(*) as pocet
from staff
group by account_id
order by pocet desc
Nahlásit jako SPAM
IP: 217.196.213.–
null_while
~ Moderátor
+6
Věrný člen
21. 10. 2012   #10
-
0
-

#9 Jasper
Jak by si do toho začlenil left join, např. opakovaný?

Nahlásit jako SPAM
IP: 84.16.103.–
WEBNIA.cz - tvorba webových stránek
Jasper0
Věrný člen
21. 10. 2012   #11
-
0
-

To co jsem psal výše můžeš použít třeba jako poddotaz ve FROM a pak s tím pracuješ jako s tabulkou:

select subquery.*, account.name
from (
	Select account_id, count(*) as pocet
	from staff
	group by account_id
	order by pocet desc
     ) as subquery
left join account on account.account_id = subquery.account_id

Teď z hlavy nevím, jestli to třízení půjde v tom poddotaze. Možná to bude chtít setřídit až v tom vnějším dotaze...

Nahlásit jako SPAM
IP: 217.196.213.–
Jasper0
Věrný člen
21. 10. 2012   #12
-
0
-

Možná by ten left join šel dát rovnou do toho původního dotazu, nevím teď zcela určitě. Když tak vyzkoušej...

Nahlásit jako SPAM
IP: 217.196.213.–
null_while
~ Moderátor
+6
Věrný člen
21. 10. 2012   #13
-
0
-

Tak super :)

Nahlásit jako SPAM
IP: 84.16.103.–
WEBNIA.cz - tvorba webových stránek
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žit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 12 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý