Forum QGIS

Pełna wersja: Zapytanie SQL w QGIS
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Stron: 1 2
Mam następującą tabelę atrybutów wektorowej warstwy shp:
[attachment=98]
Chcę policzyć liczbę gatunków występujących w danym kwadracie ATPOL
Jak powinno wyglądać zapytanie SQL?
Możesz załadować warstwę do bazy PostGIS albo SpatiaLite i wpisać (ja korzystam z wtyczki QSpatiaLite):
Kod:
select count(distinct Gatunek) from nazwa_tabeli where ATPOL=65
Dane jakich potrzebujesz można również uzyskać bez korzystania z SQL. Kreatorem zapytań w tabeli atrybutów wybierz wszystkie pola np. 65. Teraz wejdź w menu Wektor->Narzędzia analizy->Podstawowe statystyki. Zaznacz pole przy 'Użyj tylko wybranych obiektów', wybierz pole 'Gatunek' i kliknij OK. Parametr 'Liczba unikalnych obiektów' to liczba której szukasz.
Pozdrawiam
Dzięki.
Zadałem takie zapytanie:
select count(distinct Gatunek) as liczba_gatunków from stanowiska_1 as ATPOL group BY ATPOL
Chciałbym żeby zamiast tych liczb w pierwszej kolumnie wyświetlał mi np. konkretne wartości z kolumny ATPOL np. 65. (zdjęcie poniżej)
Musisz dopisać po select nazwę kolumny:
Kod:
select ATPOL, count(distinct Gatunek) as liczba_gatunków from stanowiska_1 as ATPOL group BY ATPOL
Wielkie dziękiSmile
Chciałbym z tego stworzyć nową warstwę *shp ale jak klikam z prawego przycisku myszy "Load in QGIS" to wyświetla mi komunikat "No Geometry column found" Jak to ugryźć ?
Po select dodaj jeszcze nazwę kolumny z geometrią, z tym że po dodaniu warstwy geometria będzie pobrana z ostatniego punktu z danego kwadratu ATPOL.
Wpisałem takie zapytanie:
select AddGeometryColumn('stanowiska_1', 'geometry', 2180, 'POINT', 'XY'), ATPOL, count(distinct Gatunek) as liczba_gatunków from stanowiska_1 as ATPOL group BY ATPOL
Otrzymałem tabelę jak na zał. obrazku ale dalej nie nie mogę otworzyć w QGIS komunikat " No Geometry column found"
Nie możesz użyć polecenia AddGeometryColumn w rekordach ponieważ ta funkcja odnosi się do tabeli. Zera w tabeli mówią, że nastąpił błąd w wykonywaniu funkcji.
Mógłbyś udostępnić fragment danych z tabeli stanowiska_1, wtedy byłoby mi łatwiej odnieść się do twojego pytania odnośnie geometrii.
Podaj maila to podeślę warstwę.
Ok, udało mi się osiągnąć pożądany efekt chociaż rozwiązanie nie jest zbyt optymalne.
W warstwie punktów centralnych musisz dodać kolumnę ATPOL z poligonów - można to łatwo zrobić korzystając z wtyczki Point Sampling Tool. W moim przykładzie warstwa nazywa się centra.
W QSpatiaLite wybierz tworzenie nowej tabeli (nieprzestrzennej, w przykładzie nazywa się temp) i wpisz:
Kod:
select "stanowiska_1".'ATPOL' as 'ATPOL', count(distinct stanowiska_1".'GATUNEK') as 'liczba' from stanowiska_1 group BY "stanowiska_1".'ATPOL'
Teraz wybierz tworzenie kolejnej tabeli (też nieprzestrzennej) i wpisz:
Kod:
SELECT DISTINCT "temp".'ATPOL' as ATPOL, "temp".'liczba' as 'liczba', "centra".'Geometry' as 'Geometry' FROM "temp" NATURAL JOIN "centra"
Po wykonaniu polecenia rozwiń listę kolumn nowo utworzonej tabeli, kliknij prawym klawiszem na kolumnę Geometry i wybierz Recover Geometry Column. Tabela powinna zmienić się na przestrzenną

Pozdrawiam

[Edit]
Inna metoda wykorzystująca inner join. Po stworzeniu tabeli temp ustaw tworzenie nowej tabeli przestrzennej (Create Spatial Table-ważne żeby nazwa kolumny geometrii była taka sam jak w tabeli temp) i wpisz:
Kod:
select  "centra".'Geometry',  "centra".'ATPOL',  "temp".'liczba' from centra inner join temp on  "centra".'ATPOL'= "temp".'ATPOL'
Stron: 1 2