Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen (A bis Z)

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, 3606 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
Windows Tools
gelöst Performance Counter weg (2)

Frage von emeriks zum Thema Windows Tools ...

Datenbanken
MySQL Liste simulieren (2)

Frage von Yanmai zum Thema Datenbanken ...

Exchange Server
Exchange 2016 CU6 Fehler 1006 (Performance Counter) (5)

Frage von chrishoffi zum Thema Exchange Server ...

Neue Wissensbeiträge
Windows Update

Novemberpatches und Nadeldrucker bereiten Kopfschmerzen

(14)

Tipp von MettGurke zum Thema Windows Update ...

Windows 10

Abhilfe für Abstürze von CDPUsersvc auf Win10 1607 und 2016 1607

(7)

Tipp von DerWoWusste zum Thema Windows 10 ...

RedHat, CentOS, Fedora

Fedora 27 ist verfügbar

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

Heiß diskutierte Inhalte
Batch & Shell
Batch Programm verhalten bei shoutdown -p (18)

Frage von Michael-ITler zum Thema Batch & Shell ...

Router & Routing
Freigabe aus anderem Netz nicht erreichbar (15)

Frage von McLion zum Thema Router & Routing ...

Linux Desktop
Bildschirmauflösung unter Linux festlegen (12)

Frage von itebob zum Thema Linux Desktop ...

Festplatten, SSD, Raid
Raidcontroller funktioniert nur, wenn unter Legacy-Boot gestartet wird (12)

Frage von DerWoWusste zum Thema Festplatten, SSD, Raid ...