![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 30 Pomógł: 0 Dołączył: 25.04.2006 Ostrzeżenie: (0%) ![]() ![]() |
Heja
Mam nastepujaca tabele "results" results : id value question_id i chce policzyc jednym zapytaniem jednoczesnie ilosc wszystkich rekordow w bazie + rekordy pogrupowane wedlug pola "value" Myslalem nad czyms takm, ale nie dziala:
Z gory dzieki za pomoc |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 150 Pomógł: 3 Dołączył: 15.08.2007 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 69 Pomógł: 0 Dołączył: 22.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
Oprocz wymienionych sposobow podanych przez @kris2 mozesz zrobic to co potrzebujesz za pomoca jednego zapytania SQL, gdyz nie wszystkie RDBMSy maja zaimplementowane wyzej wymienione funkcje.
Jak rozumiem chcesz pogrupowac dane z kolumny "value" wzgledem kolumny "question_id". Przede wszystkim nalezy pogrupowac dane wzgledem "question_id", a nie "value" ("value" jest kolumna agregowana, wiec nie moze byc grupowania wedlug tej kolumny). Zapytanie bedzie wygladalo nastepujaco :
Jako wynik otrzymamy tabele zawierajaca sume wszystkich wartosci value dla poszczegolnych wartosci pola question_id. Cytat chce policzyc jednym zapytaniem jednoczesnie ilosc wszystkich rekordow w bazie Chyba chodzilo ci o ilosc wszystkich rekordow w tabeli "results" a nie w calej bazie. Dodanie count(*) do pytania
jest bledne. Dlaczego ? W wyniku da tabele, w ktorej w kolumnie "ilosc_rekordow" dane bede zagregowane dla kazdego "question_id", czyli w kazdej krotce bedzie zliczona ilosc wystapien tego samego "question_id", a nie calkowita ilosc rekordow w tabeli. Zeby osiagnac to, czego chcemy, nalezy uzyc podazytania :
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 30 Pomógł: 0 Dołączył: 25.04.2006 Ostrzeżenie: (0%) ![]() ![]() |
fakt to rozwiazuje problem, ale zastanawialem sie czy da sie to zrobic jednym zapytaniem wykorzystujac jakis sprytnu sposob... zapytanie zaproponowane przezemnie pobiera wszystkie wiersze... po czym je grupuje, wiec wydaje sie ze jest to mozliwe bez dodatkowego ( nawet zagnierzdzonego ) zapytania.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 69 Pomógł: 0 Dołączył: 22.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
Heja Mam nastepujaca tabele "results" results : id value question_id i chce policzyc jednym zapytaniem jednoczesnie ilosc wszystkich rekordow w bazie + rekordy pogrupowane wedlug pola "value" Myslalem nad czyms takm, ale nie dziala:
Z gory dzieki za pomoc Do tego zapytania jeszcze sie odniose - uzywasz tutaj sumowania na kolumnie "liczba" a wyzej nie wymieniles, zeby taka kolumna znajdowala sie w tabeli "results". Oprocz tego napisales, ze chcesz wydobyc ilosc wszystkich rekordow w bazie, a uzywasz w zapytanie "count(question_id)", a to niekoniecznie musi zwrocic ilosc rekordow w tabeli (bo chyba o nia ci chodzilo) - jezeli ktoras z wartosci question_id bedzie NULL to wtedy "count" tego nie policzy - lepiej liczyc ilosc kluczy glownej w tabeli (tutaj "id") albo wszystkich wszystkich kolumn ("count(*)") - chyba ze masz poprawnie skonstruowana relacje, w ktorej "question_id" jest kluczem obcem jakies innej tabeli i ma ustawiona wlasciwosc "NOT NULL". Moze przedstaw jakies przykladowe dane z tej tabeli i napisz jakie chcialbys wyniki - wtedy latwiej bedzie skonstruowac zapytanie, bo prawde mowiac nadal nie za bardzo rozumiem co chcesz osiagnac. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 30 Pomógł: 0 Dołączył: 25.04.2006 Ostrzeżenie: (0%) ![]() ![]() |
Moja propozycja zapytania:
To zapytanie policzy mi wystepowanie question_id (PK) w tabeli result pogrupowane wedlug wartosci (value)... z tym ze chce dodatkowo policzyc % danej pozycji czyli dla value "cos" = 3% aby to zrobiec musze wiedziec ile jest wszystkich wierszy... myslalem ze jak policze sobie countem i nadam alias o nazwie liczba (count( `question_id` ) AS liczba) a pozniej uzyje funkcji sum(liczba) to cos z tego bedzie ale mysql nie kuma o co mi chodzi... Mam nadzieje ze teraz bardziej zrozumiale |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 69 Pomógł: 0 Dołączył: 22.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
Hmm... nadal nie rozumiem - chcesz policzyc wartosc procentowa, ale czego dokladnie?
MySQL nie przetworzy tego zapytania, bo nie wie, co to jest za kolumna "liczba". Musisz uzyc podzapytania, zeby utworzyc z niej alias.
ale nie wiem czy to jest to o co ci chodzilo. Jak mozesz to napisz od strony logiki biznesowej do czego sluza dane, ktore tam trzymasz i co chcesz za ich pomoca osiagnac. I najlepiej bedzie, tak jak juz wspomnialem poprzednio, podaj jakies przykladowe dane i wynik jaki chcesz dostac. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 01:52 |