Ergebnis 1 bis 4 von 4

Thema: SQL Intersection mit nachfolgender Gruppierung

  1. #1
    Ananasinka ist offline Neuer Benutzer
    Registriert seit
    23.08.2011
    Beiträge
    11

    Standard SQL Intersection mit nachfolgender Gruppierung

    Hallo zusammen,

    ich bin gerade dabei, einen SQL-Request in pgAdminIII zu basteln, der mir aus zwei Geometrietabellen passende Zeilen aussucht, dann Tabellen miteinander verschneidet und anschließend das Ergebnis nach einem bestimmten Kriterien gruppiert. Ich bin erfolgreich bis zur Verschneidung durchgekommen, kann allerdings keine Gruppierung durchführen.

    Könnt ihr mir vielleicht einen Tipp geben, woran es scheitert und wie man den Fehler umgehen kann?

    SQL-Request:
    Code:
    Select b.distr, Area (ST_Intersection (a.the_geom, b.the_geom) AS  intersection_geom FROM tabelle1 as a, tabelle2 as b WHERE ISEmpty  (ST_Intersection (a.the_geom, b.the_geom)) = FALSE AND b.name <>  'Helgoland' AND a.poskey = 'Watt' GROUP BY b.distr;
    Die Fehlermeldung lautet: Spalte "a.the_geom" muss in der GROUP-BY-Klausel erscheinen oder in einer Aggregatfunktion verwendet werden.

    Danke im Voraus.

  2. #2
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von Ananasinka Beitrag anzeigen
    Hallo zusammen,

    ich bin gerade dabei, einen SQL-Request in pgAdminIII zu basteln, der mir aus zwei Geometrietabellen passende Zeilen aussucht, dann Tabellen miteinander verschneidet und anschließend das Ergebnis nach einem bestimmten Kriterien gruppiert. Ich bin erfolgreich bis zur Verschneidung durchgekommen, kann allerdings keine Gruppierung durchführen.

    Könnt ihr mir vielleicht einen Tipp geben, woran es scheitert und wie man den Fehler umgehen kann?

    SQL-Request:
    Code:
    Select b.distr, Area (ST_Intersection (a.the_geom, b.the_geom) AS  intersection_geom FROM tabelle1 as a, tabelle2 as b WHERE ISEmpty  (ST_Intersection (a.the_geom, b.the_geom)) = FALSE AND b.name <>  'Helgoland' AND a.poskey = 'Watt' GROUP BY b.distr;
    Die Fehlermeldung lautet: Spalte "a.the_geom" muss in der GROUP-BY-Klausel erscheinen oder in einer Aggregatfunktion verwendet werden.

    Danke im Voraus.
    Die Fehlermeldung ist doch eigentlich klar, oder? Du wirst a.the_geom sicherlich nicht aggregieren wollen (also davon max() oder so bilden), dann entweder diese Spalte auch noch in das GROUP BY aufnehmen, oder, was dasselbe ist, GROUP BY ganz weglassen.


    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  3. #3
    Ananasinka ist offline Neuer Benutzer
    Registriert seit
    23.08.2011
    Beiträge
    11

    Standard

    Zitat Zitat von akretschmer Beitrag anzeigen
    Die Fehlermeldung ist doch eigentlich klar, oder? Du wirst a.the_geom sicherlich nicht aggregieren wollen (also davon max() oder so bilden), dann entweder diese Spalte auch noch in das GROUP BY aufnehmen, oder, was dasselbe ist, GROUP BY ganz weglassen.
    Ja, die Fehlermeldung ist klar Die Frage ist, wie kann ich sie vermeiden. Die Idee ist folgende:
    - aus zwei Tabellen passende Daten filtern,
    - diese Daten aus zwei Tabellen miteinander überschneiden (bis zu dieser Stelle komme ich - das Ergebnis ist eine Tabelle mit zwei Spalten, "distr" und "intersection_geom")
    - nun möchte ich diese Tabelle so umformen, dass sie nur noch aus zwei Zeilen besteht - das sind nämlich zwei unterschiedliche "distr", sagen wir mal distr_A und distr_B. Ich brauche Summen von Flächen für jedes "distr", so ungefähr:
    distr | intersection_geom
    distr_A 123456
    distr_B 789012

    Oder verstehe ich die Funktion GROUP BY falsch? Wie kann ich dann nach dem Attribut "distr" dazugehörige Flächen zusammenaddieren?

  4. #4
    Ananasinka ist offline Neuer Benutzer
    Registriert seit
    23.08.2011
    Beiträge
    11

    Standard

    Ok, ich hab's hingekriegt! Bei mir fehlte die SUM-Operation für die Flächen.

    So funktioniert es genau, wie ich es brauche:

    Select b.distr, SUM (Area (ST_Intersection (a.the_geom, b.the_geom)))
    AS intersection_geom FROM tabelle1 as a, tabelle2 as b
    WHERE ISEmpty (ST_Intersection (a.the_geom, b.the_geom)) = FALSE
    AND b.name <> 'XXX' AND a.poskey = 'YYY'
    GROUP BY b.distr;

Ähnliche Themen

  1. Antworten: 10
    Letzter Beitrag: 27.01.2011, 08:05
  2. Frage Abfrage mit Gruppierung
    Von toni_83 im Forum SQL
    Antworten: 17
    Letzter Beitrag: 11.08.2010, 09:45
  3. Problem Intersection in 3D
    Von O.O im Forum SQL
    Antworten: 0
    Letzter Beitrag: 24.06.2010, 20:47
  4. Gruppierung und Summe aus einer Abfrage
    Von ipConfig im Forum SQL
    Antworten: 2
    Letzter Beitrag: 18.02.2010, 12:32
  5. Gruppierung !?
    Von larrry im Forum SQL
    Antworten: 6
    Letzter Beitrag: 30.01.2008, 11:21

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum