Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Obliczenia bezpośrednio w bazie danych
kovalson
post
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 24.08.2011

Ostrzeżenie: (0%)
-----


Witam, od pewnego czasu mam problem z napisaniem zapytania, które ma dokonać obliczeń na 2 róznych tabelach bezpośrednio w bazie, a chodzi mi o coś takiego:
(IMG:http://oi34.tinypic.com/2rq0ihe.jpg)

Chcę z TABELI 1 zsumować wszystkie pola o nazwie ILOŚĆ grupując je względem ID, a w TABELI 2 chcę zliczyć wystąpienia (COUNT) samego ID2 i pogrupować je względem ID.
Następnie otrzymane ilości wystąpień z TABELI 2 chcę podzielić przez sumy ILOŚCI z TABELI 1 ale tylko tam, gdzie TABELA1.ID = TABELA2.ID2 <- ID jest wspólne dla obu tabel.

Próbowałem robić to INNER JOINEM - złączyć obie tabele względem ID , ale przy zapisie SUM(ILOSCI) wychodziły brednie - zamiast np. 300 wychodziło 98 000, tak samo COUNT(ID2) - zamiast 30 wychodziło 1300.
Przykładowe zapytanie wyglądało mniej więcej tak, ale uprzedzam, że nie działa poprawnie:

  1. SELECT (COUNT(ID2) / SUM(ILOSCI)) AS wynik
  2. FROM TABELA_1
  3. INNER JOIN TABELA_2 ON TABELA_1.ID = TABELA_2.ID
  4. GROUP BY ID
Go to the top of the page
+Quote Post
redeemer
post
Post #2





Grupa: Zarejestrowani
Postów: 915
Pomógł: 210
Dołączył: 8.09.2009
Skąd: Tomaszów Lubelski/Wrocław

Ostrzeżenie: (0%)
-----


Pisane na szybko, prawdopodobnie da się lepiej:
  1. SELECT t1.id,sum_ilosc,count_id2,count_id2/sum_ilosc AS wynik FROM
  2. (SELECT t1.id,sum(t1.ilosc) AS sum_ilosc FROM tabela1 AS t1 GROUP BY t1.id) AS t1
  3. LEFT JOIN
  4. (SELECT t2.id,count(t2.id) AS count_id2 FROM tabela2 AS t2 GROUP BY t2.id) AS t2
  5. ON t1.id=t2.id
Go to the top of the page
+Quote Post
kovalson
post
Post #3





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 24.08.2011

Ostrzeżenie: (0%)
-----


Uff, lekko przerobiłem do własnych potrzeb i w końcu działa jak należy. Wielkie Dzięki! (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 01:14