ugrás a tartalomhoz

lekérdezés

HPeti · 2009. Júl. 27. (H), 12.07
Sziasztok!


Hiába kerestem, sajnos nem találtam megoldást arra, hogy hogyan lehet intervallumok között gyakoriságot lekérdezni? pl. meg ha akarom állapítani az első kerületben élőket, akkor bele kell számolni a 1011-től 1019-ig tartó irányítószámú betegeket. Második kerületnél 1021-1029-ig és stb...egyelőre nem sikerült ezt megoldanom.
 
1

between vagy in

fchris82 · 2009. Júl. 27. (H), 12.30
Ha van egy minimum és maximum érték, ami között le akarsz kérdezni, akkor használd a between-t: MySQL5 between . Az alábbi példa megszámolja, hogy hány cím van az adatbázisban, akik az első kerületben laknak.
SELECT COUNT(*) FROM address WHERE zip BETWEEN 1011 and 1019
Amennyiben felsorolás szerű lekérdezést szeretnél, mert nem szabályszerűen egyesével nőnek az értékek, akkor pedig in: MySQL5 in . Az alábbi példa lekérdezi, hogy hány cím van az adatbázisban, ami a 1011, 1013 és 1019-es irányítószámmal rendelkezik.
SELECT COUNT(*) FROM address WHERE zip IN (1011, 1013, 1019)
2

rosszul fogalmaztam

HPeti · 2009. Júl. 27. (H), 12.40
Igen, az megvan!de az a gond, hogy ha jól tudom, akkor between-el csak egy tartományba eső értékek darabszámát lehet megkapni...én azt szeretném, hogy mind a 23 kerületnek külön-külön dobja ki...tehát 23 számot szeretnék kapni,(mert annyi kerület van)...
3

group by

ThomasEdison · 2009. Júl. 27. (H), 13.05
Csinálj egy GROUP BY-t SUBSTRING(zip,2,2) -re.
Bár ez nem túl hatékony, mert nincs rá index. (aránylag kis táblánál még elmegy)
Másik megoldás, hogy csinálsz egy külön mezőt a kerületre (amit akár triggerrel is tölthetsz az irányítószám alapján, így nem kell rá figyelned, hogy milyen adatot teszel bele), így arra már lehet indexelni.
4

group by kerület()

jaczkog · 2009. Júl. 27. (H), 13.11
Ha az irányítószámot számként tárolod:

select
	floor(zip/10)-100 `kerület`,
	count(*) `darab`
from `address`
where floor(zip/1000)=1
group by floor(zip/10)-100
order by `kerület`
Ha szövegként tárolod, akkor az előző hozzászólás segít:

select
	substring(zip, 2, 2) `kerület`,
	count(*) `darab`
from `address`
where zip like '1%'
group by substring(zip, 2, 2)
order by `kerület`
5

Csak egy táblám van, az is az

HPeti · 2009. Júl. 27. (H), 13.36
Csak egy táblám van, az iranyítószamok. Kipróbáltam a where in-t, de az csak egy számot ad vissza..egy lekérdezésben nem lehet több between-t használni?:) most utánanézek ennek a substring-es megoldásnak. Az a probléma, hogy minden kerületnek nem ugyannyi irányítószáma van, pl. első kerületnél van ugye 9, vagyis 1011-1019-ig, viszont a 23. kerület esetében csak négy vagyis 1231-1234-ig...jó lenne akár egyenként megadni ezeket, ha lehet valahogy.