Das Forentreffen 2018 findet am 20./21. April in Dresden statt. Weitere Infos hier
Zur Homepage des Deutschsprachige Xbase-Entwickler e. V.
Xbase++-Wiki des Deutschsprachige Xbase-Entwickler e. V.

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: 2284
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Kontaktdaten:

Abfrage auf ein Feld

Beitrag von Wolfgang Ciriack » Do, 10. Okt 2013 9:04

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: 2449
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Kontaktdaten:

Re: Abfrage auf ein Feld

Beitrag von UliTs » Do, 10. Okt 2013 9:22

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: 157
Registriert: Mo, 09. Jan 2006 17:06
Wohnort: Paderborn
Kontaktdaten:

Re: Abfrage auf ein Feld

Beitrag von hschmidt » Do, 10. Okt 2013 9:23

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: 2449
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Kontaktdaten:

Re: Abfrage auf ein Feld

Beitrag von UliTs » Do, 10. Okt 2013 9:47

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: 2284
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Kontaktdaten:

Re: Abfrage auf ein Feld

Beitrag von Wolfgang Ciriack » Do, 10. Okt 2013 10:06

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
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 272
Registriert: Di, 24. Apr 2012 16:33
Wohnort: 72181 Starzach
Kontaktdaten:

Re: Abfrage auf ein Feld

Beitrag von nightcrawler » Do, 10. Okt 2013 10:37

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: 2284
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Kontaktdaten:

Re: Abfrage auf ein Feld

Beitrag von Wolfgang Ciriack » Do, 10. Okt 2013 10:45

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: 1933
Registriert: Fr, 08. Feb 2008 21:29

Re: Abfrage auf ein Feld

Beitrag von georg » Do, 10. Okt 2013 11:32

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

Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2284
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Kontaktdaten:

Re: Abfrage auf ein Feld

Beitrag von Wolfgang Ciriack » Do, 10. Okt 2013 13:36

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