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, 3545 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 ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Microsoft Office
gelöst Einträge untereinander Auflisten (8)

Frage von batchnewbie zum Thema Microsoft Office ...

PHP
PHP MySQL Login (7)

Frage von Yanmai zum Thema PHP ...

Heiß diskutierte Inhalte
DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (10)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...

Backup
Clients als Server missbrauchen? (9)

Frage von 1410640014 zum Thema Backup ...