Abfrage auf ein Feld

Alles zum SQL-Dialekt

Moderator: Moderatoren

Abfrage auf ein Feld

Beitragvon Wolfgang Ciriack » Do, 10. Okt 2013 8: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
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 2227
Registriert: Sa, 24. Sep 2005 8:37
Wohnort: Berlin

Re: Abfrage auf ein Feld

Beitragvon UliTs » Do, 10. Okt 2013 8: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
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 2370
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen

Re: Abfrage auf ein Feld

Beitragvon hschmidt » Do, 10. Okt 2013 8: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
hschmidt
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 157
Registriert: Mo, 09. Jan 2006 17:06
Wohnort: Paderborn

Re: Abfrage auf ein Feld

Beitragvon UliTs » Do, 10. Okt 2013 8:47

Top Lösung, Hans!
Ich glaube, einfacher geht es nicht mehr :)
Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 2370
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen

Re: Abfrage auf ein Feld

Beitragvon Wolfgang Ciriack » Do, 10. Okt 2013 9: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
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 2227
Registriert: Sa, 24. Sep 2005 8:37
Wohnort: Berlin

Re: Abfrage auf ein Feld

Beitragvon nightcrawler » Do, 10. Okt 2013 9: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
nightcrawler
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 258
Registriert: Di, 24. Apr 2012 15:33
Wohnort: 72181 Starzach

Re: Abfrage auf ein Feld

Beitragvon Wolfgang Ciriack » Do, 10. Okt 2013 9: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
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 2227
Registriert: Sa, 24. Sep 2005 8:37
Wohnort: Berlin

Re: Abfrage auf ein Feld

Beitragvon georg » Do, 10. Okt 2013 10: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
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 1780
Registriert: Fr, 08. Feb 2008 21:29

Re: Abfrage auf ein Feld

Beitragvon Wolfgang Ciriack » Do, 10. Okt 2013 12: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
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 2227
Registriert: Sa, 24. Sep 2005 8:37
Wohnort: Berlin


Zurück zu SQL (Sprache)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast