Dariusz Jachemczyk

Dariusz Jachemczyk inzynier sieciowy /
IP VoIP, NASK

Temat: Zapytanie do mySQL

Witam,

Mam prośbę o pomoc w stworzeniu zapytania do bazy danych mySQL. Mam dwie tabele:

tabela1
lokalizacja koszt kraj data
lok1 10 PL 2011-08-01
lok2 20 PL 2011-08-01
lok1 20 DE 2011-08-01
lok2 7 DE 2011-08-01
lok1 12 NL 2011-08-01
lok2 21 ES 2011-08-01
lok1 4 US 2011-08-01
lok2 7 US 2011-08-01

tabela2
kraj1 sprawdz limit
PL 1 28
DE 1 30
NL 0 12
US 1 5
ES 1 20

Chciałbym teraz odnaleźć te kraje w których koszty przekraczają limit. Do tej pory miałem na stałe ustawiony limit dla wszystkich krajów i robiłem to tak:

SELECT SUM(koszt) as koszty, kraj FROM tabela1 WHERE data="xxxx-xx-xx" AND kraj IN (SELECT kraj1 FROM tabela2 WHERE sprawdz=1) GROUP BY kraj HAVING SUM(calls)>25

ale przyszedł czas na zmiany :), czyli w wyniku zapytania miało by wyświetlić
PL 30
US 11
ES 21
Grzegorz D.

Grzegorz D. PL/SQL Developer

Temat: Zapytanie do mySQL

Może tak?


SELECT zgrupowane.kraj, zgrupowane.suma_kosztow
FROM
(SELECT kraj, sum(koszt) as suma_kosztow
FROM tabela1
WHERE data=....
GROUP BY kraj
) zgrupowane
INNER JOIN
tabela2 limity
ON zgrupowane.kraj = limity.kraj
AND zgrupowane.suma_kosztow > limity.limit
AND limity.sprawdz = 1
Krzysztof Białkowski

Krzysztof Białkowski Software Developer
(C# .NET)

Temat: Zapytanie do mySQL


select t1.kraj,SUM(t1.koszt) as suma,DATE_FORMAT(t1.data,'%Y-%m-%d') as data,t2.sprawdz,t2.limity
from tabela1 t1
join tabela2 t2 on (t1.kraj=t2.kraj)
where t2.sprawdz=1 and DATE_FORMAT(t1.data,'%Y-%m-%d')='2011-08-15'
group by t1.kraj
having suma > t2.limity ;


+------+------+------------+---------+--------+
| kraj | suma | data | sprawdz | limity |
+------+------+------------+---------+--------+
| ES | 21 | 2011-08-15 | 1 | 20 |
| PL | 30 | 2011-08-15 | 1 | 28 |
| US | 11 | 2011-08-15 | 1 | 5 |
+------+------+------------+---------+--------+

Marcin Miga

Marcin Miga Programista. Po
prostu programista.

Temat: Zapytanie do mySQL

SELECT 
t1.kraj,
t2.`limit`,
SUM(t1.koszt) As koszty
FROM
tabela1 As t1
JOIN
tabela2 As t2
ON
t1.kraj=t2.kraj1
WHERE
t2.sprawdz=1
GROUP BY
t1.kraj,
t2.`limit`
HAVING
SUM(t1.koszt)>t2.`limit`

Następna dyskusja:

Zapytanie MySQL




Wyślij zaproszenie do