Seite 1 von 1

Abfrage auf ein Feld

Verfasst: Do, 10. Okt 2013 9:04
von Wolfgang Ciriack
Hallo SQL-Spezis,
da ich mich bisher (noch) nicht allzuviel mit der SQL-Syntax beschäftigt habe, hier mal eine Frage an die Spezis:

Ich möchte auf einer MySQL-Tabelle abfragen, wieviel verschiedene Nummern in dem Feld ID vorkommen.
Kann mir da jemand die Syntax verraten ?

Re: Abfrage auf ein Feld

Verfasst: Do, 10. Okt 2013 9:22
von UliTs

Code: Alles auswählen

SELECT Count(*)
FROM
(
SELECT Id FROM TableName
GROUP BY Id
) TableIds
Das SELECT innerhalb der Klammern ergibt eine Teilmenge, bei der jede Id nur einmal aufgeführt wird.
Das äußere SELECT zählt die Zeilen der Teilmenge.
Uli

Re: Abfrage auf ein Feld

Verfasst: Do, 10. Okt 2013 9:23
von hschmidt
Hallo Wolfgang,

ich kenne nur den ADS SQL-Dialekt. Da würden die Abfrage lauten:

Code: Alles auswählen

SELECT COUNT (DISTINCT id) FROM tablename
Ich denke, das wird bei MYSQL auch nicht viel anders sein.

Freundliche Grüße

Hans

Re: Abfrage auf ein Feld

Verfasst: Do, 10. Okt 2013 9:47
von UliTs
Top Lösung, Hans!
Ich glaube, einfacher geht es nicht mehr :)
Uli

Re: Abfrage auf ein Feld

Verfasst: Do, 10. Okt 2013 10:06
von Wolfgang Ciriack
Vielen Dank, unter MySQL klappt es mit

Code: Alles auswählen

SELECT DISTINCT <feld> FROM <tabelle>
Kann man das noch erweitern um die Häufigkeit des Vorkommens ?

Re: Abfrage auf ein Feld

Verfasst: Do, 10. Okt 2013 10:37
von nightcrawler
Wolfgang Ciriack hat geschrieben:

Code: Alles auswählen

SELECT DISTINCT <feld> FROM <tabelle>
Kann man das noch erweitern um die Häufigkeit des Vorkommens ?
Das bringt aber ein anderes Ergebnis...hier erscheint jeder eindeutige Wert genau einmal in der Ergebnismenge. Bsp population Tabelle:

Code: Alles auswählen

select count(distinct cities) from population
liefert Dir die Zahl, wieviele Städte es in der Tabelle gibt

Code: Alles auswählen

select distinct cities from population
liefert dir jede Stadt genau einmal in der Ergebnismenge

Code: Alles auswählen

select cities, count(*) from population group by cities
liefert dir alle Städte in der Ergebnismenge und zeigt gleich an, wieviele Personen in der jeweiligen Stadt leben.

Re: Abfrage auf ein Feld

Verfasst: Do, 10. Okt 2013 10:45
von Wolfgang Ciriack
Hallo Joachim,

Code: Alles auswählen

select cities, count(*) from population group by cities
liefert mir genau das, was ich suchte.
Vielen Dank

Re: Abfrage auf ein Feld

Verfasst: Do, 10. Okt 2013 11:32
von georg
Hallo, Wolfgang -


Vorschlag zur Güte:

Code: Alles auswählen

SELECT cities, count(*) FROM population GROUP BY cities ORDER BY cities
Ohne die ORDER Clause liefert SQL die Daten, wie sie in der Tabelle liegen, und bildet jedesmal eine Summe, wenn cities sich ändert. Durch das ORDER BY sorgst Du dafür, dass die Daten in der gewünschten Reihenfolge kommen. Vorsicht: abhängig vom SQL-Dialekt kann es vorkommen, dass der Server die Sortierung, die für PRIMARY KEY angelegt wird, bei solchen Abfragen verwendet.

Wenn die Tabelle also so definiert wurde:

Code: Alles auswählen

CREATE TABLE population (cities char(64), zipcode char(8), population bigint, PRIMARY KEY cities)
sind die Chancen z.B. bei MySQL gut, dass das Ergebnis nach PRIMARY KEY gelesen wird und damit Deinen Vorstellungen entspricht. Lässt Du das Ganze auf einem anderen SQL-Server laufen, kann das Ergebnis ohne ORDER BY komplett anders aussehen.

Re: Abfrage auf ein Feld

Verfasst: Do, 10. Okt 2013 13:36
von Wolfgang Ciriack
Hallo Georg,
vielen Dank für deine ausführlichen Anmerkungen.
Das mit der Anzahl war eigentlich nur ein Zusatz, den ich nicht unbedingt benötige.
Mir ging es nur darum festzustellen, auf wie vielen verschiedenen Smartphones meine App installiert wurde und, da einige IDs nur zu Testzwecken benutzt wurden, und wie viele Auftragsdaten von diesen gesendet wurden.

Da habe ich mit der o.g. Abfrage genau das bekommen, ich konnte daraus sehen, das 3 IDs nur <10 Aufträge versand haben und daher als Test anzusehen sind.