Abfrage auf ein Feld

Alles zum SQL-Dialekt

Moderator: Moderatoren

Antworten
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Abfrage auf ein Feld

Beitrag 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 ?
Viele Grüße
Wolfgang
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Abfrage auf ein Feld

Beitrag 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
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
hschmidt
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 164
Registriert: Mo, 09. Jan 2006 17:06
Wohnort: Paderborn
Hat sich bedankt: 2 Mal
Kontaktdaten:

Re: Abfrage auf ein Feld

Beitrag 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
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Abfrage auf ein Feld

Beitrag von UliTs »

Top Lösung, Hans!
Ich glaube, einfacher geht es nicht mehr :)
Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Abfrage auf ein Feld

Beitrag 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 ?
Viele Grüße
Wolfgang
Benutzeravatar
nightcrawler
1000 working lines a day
1000 working lines a day
Beiträge: 650
Registriert: Di, 24. Apr 2012 16:33
Wohnort: 72184 Weitingen
Hat sich bedankt: 3 Mal
Danksagung erhalten: 96 Mal
Kontaktdaten:

Re: Abfrage auf ein Feld

Beitrag 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.
--
Joachim
Joachim Dürr Softwareengineering
https://www.jd-engineering.de
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Abfrage auf ein Feld

Beitrag 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
Viele Grüße
Wolfgang
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Abfrage auf ein Feld

Beitrag 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.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Abfrage auf ein Feld

Beitrag 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.
Viele Grüße
Wolfgang
Antworten