Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

mySQL - Wie zähle ich Einträge die keinen count haben

Frage Entwicklung Datenbanken

Mitglied: fablei

fablei (Level 1) - Jetzt verbinden

10.09.2008, aktualisiert 16:53 Uhr, 3573 Aufrufe, 7 Kommentare

Hallo Forum,

ich habe zwei Tabellen. Die eine enthält Altersstufen (Tabelle alter), die andere enthält dazugehörige Texte (Tabelle texte).


id alter
1 10-12
2 13-15
3 16-18
4 19-27

id alter_id texte
1 3 bla
2 3 blub
3 3 lala
4 1 haha

Nun brauche ich eine Abfrage, die mir sagt wieviele Texteinträge es zu der jeweiligen Altersstufe gibt.
Folgendes habe ich dazu schon, das ist aber nicht was ich brauche:

Select COUNT(texte.id) AS Anzahl, alter.id
FROM texte
JOIN `alter` ON texte.alter_id = alter.id
WHERE
-hier ein paar Bedingungen-
GROUP BY alter.id

Diese Abfrage würde mir aber nur folgendes Ergebnis liefern:

Anzahl alter.id
3 16-18
1 10-12

Ich möchte aber dieses Ergbnis:

Anzahl alter
1 10-12
0 13-15
3 16-18
0 19-27

Wie lässt sich das als SQL Statement formulieren?

Danke und viele Grüße,
Fabian
Mitglied: Biber
10.09.2008 um 12:15 Uhr
Moin fablei,

eine Möglichkeit von vielen:
01.
Select COUNT(texte.id) AS Anzahl, alter.id 
02.
FROM texte 
03.
LEFT JOIN `alter` ON texte.alter_id = alter.id 
04.
WHERE 
05.
-hier ein paar Bedingungen- 
06.
GROUP BY alter.id
Grüße
Biber
Bitte warten ..
Mitglied: fablei
10.09.2008 um 14:02 Uhr
Hi,

danke für die Antwort.

Leider liefert diese Abfrage dasselbe Ergebnis zurück wie meine schon gepostete.

Es werden keine Null-Treffer berücksichtigt.

Welche Möglichkeiten gibt es denn noch?

Grüße,
Fabian
Bitte warten ..
Mitglied: Biber
10.09.2008 um 14:35 Uhr
Moin fablei,

hast natürlich Recht - so viel kann ein LEFT JOIN nicht bringen, wenn nach wie vor die Tabelle mit "allen Sätzen" die Tabelle "texte" bleibt....

01.
Select COUNT(texte.id) AS Anzahl, alter.id 
02.
FROM `alter` 
03.
LEFT JOIN texte ON `alter`.id = texte.alter_id 
04.
WHERE 
05.
-hier ein paar Bedingungen- 
06.
GROUP BY alter.id
Sorry für das zu flüchtige Lesen
Biber
Bitte warten ..
Mitglied: fablei
10.09.2008 um 15:22 Uhr
Hm ich glaube langsam das Grundproblem ist der count(). Dieser scheint, wenn es keinen Datensatz gibt der die Bedingungen erfüllt, nicht einfach eine 0 auszugeben, sondern lieber gar nichts.

Prinzipiell hast du ja Recht. Die Tabelle alter ist die Grundlage und zu jedem Datensatz soll ein Count ermittelt werden. Ist dieser aber 0 wird im Result der Datensatz nicht mehr beachtet

Habe auch schon so Sachen gelesen wie: if(count(texte.id)="",0,count(texte.id)
Das geht aber auch nicht

Ich bin verzweifelt...
Bitte warten ..
Mitglied: Biber
10.09.2008 um 15:45 Uhr
Moin fablei,

wenn ich Deine Idee versuche (ungetestet) umzusetzen, dann sollte syntaktisch so etwas herauskommen:
01.
Select  
02.
If (IsNull(texte.id), 0,COUNT(texte.id)) AS Anzahl, alter.id 
03.
FROM `alter` 
04.
LEFT JOIN texte ON `alter`.id = texte.alter_id 
05.
WHERE 
06.
-hier ein paar Bedingungen- 
07.
GROUP BY alter.id
Grüße
Biber
Bitte warten ..
Mitglied: fablei
10.09.2008 um 15:56 Uhr
Habs mal gerade versucht. Klappt leider auch nicht. Immer das selbe. Die Nuller bleiben weg. Fraglich ist ja auch, ob das vielleicht Absicht ist und wir hier irgendwas wichtiges vergessen. Vielleicht hat das einen guten Grund warum solche Konstrukte immer nur die Datensätze ausgeben, die mit der Abfrage übereinstimmen und nicht die die quasi die Negativabfrage erfüllen würden.

Grüße,
Fabian
Bitte warten ..
Mitglied: SvenGuenter
10.09.2008 um 16:53 Uhr
Naja fast. Das Problem ist nicht das der Wert <NULL> ist sondern gar nicht da.
Wenn ich das richtig sehe ist das du einen Count auf die alter.Table machen musst. Und dazu einen full outer Join oder right outer join auf die Leute. Dann müßte es klappen.
Verbal Ausgedrückt

Zähle alles auch wenn es keinen eintrag in der tabelle Texte hat.
01.
Select count(alter.id) from 
02.
alter right outer join texte on alter.id = texte.alter_id
Bitte warten ..
Ähnliche Inhalte
Datenbanken
gelöst MySQL "order by" erst bestimmtes Wort, dann alphabetisch (9)

Frage von AS-N00 zum Thema Datenbanken ...

Windows Server
MySQL Dienst startet nicht mehr nach Absturz SBS2011 (4)

Frage von JohnMcenroe zum Thema Windows Server ...

Datenbanken
gelöst MYSQL View group by (2)

Frage von schneerunzel zum Thema Datenbanken ...

Windows Systemdateien
Windows 10 Registry Einträge entfernen (18)

Frage von Hendrik2586 zum Thema Windows Systemdateien ...

Neue Wissensbeiträge
RedHat, CentOS, Fedora

Fedora, RedHat, Centos: DNS-Search Domain setzen

(9)

Tipp von Frank zum Thema RedHat, CentOS, Fedora ...

Drucker und Scanner

Samsung SL-M4025ND, firmware update und (kompatible) Tonerkassetten

(1)

Erfahrungsbericht von markus-1969 zum Thema Drucker und Scanner ...

Router & Routing

PfSense auf Supermicro Intel Xeon D-15x8 SoC Bare Bone

Tipp von Dobby zum Thema Router & Routing ...

Heiß diskutierte Inhalte
Windows 10
Windows für Privatanwender "nicht mehr handhabbar" (26)

Frage von FA-jka zum Thema Windows 10 ...

LAN, WAN, Wireless
Brauche Hilfe: Mit (schnellem) WLAN Strecke überbrücken (23)

Frage von pierrehansen zum Thema LAN, WAN, Wireless ...

Basic
Programmierung von Windows Programmen (10)

Frage von Ghost108 zum Thema Basic ...