Top-Themen

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
GELÖST

MySQL Count mit Where

Frage Entwicklung Datenbanken

Mitglied: Maik87

Maik87 (Level 2) - Jetzt verbinden

05.02.2013, aktualisiert 11:42 Uhr, 3397 Aufrufe, 10 Kommentare

Hallo zusammen,

ich habe eine Tabelle die so aussieht:

ID - Kennz
1 -
2 -
2 - X
2 - X
3 -
4 -
4 - X

Jetzt möchte ich eine Abfrage stricken, die mir eine eindeutige Liste der IDs liefert, mit einem Kennzeichen, ob der Datensatz doppelt in der Tabelle steht.

Für die Auflistung sollen alle Datensätze beachtet werden, bei dem Kennzeichen nur jene, welche in der Spalte Kennz = X sind.

Folgender Ansatz ist getroffen:

01.
SELECT a.ID, if(count(b.ID)>1,'X','')  
02.
FROM `Tabelle` a left JOIN Tabelle b on (a.ID=b.ID)  
03.
WHERE b.`Kennz`='X' group by a.`ID`
Die Auflistung klappt, das Kennzeichen "Doppelt" auch - jedoch beachtet er nicht die Spalte "Kennz". Baue ich diese in das HAVING ein, wird sie beachtet - logischerweise klappt dann aber die vollständige Auflistung nicht mehr.


Hat jemand einen Tipp für mich??


Achja, das Ergebnis für mein Beispiel sollte so aussehen:
1 -
2 - X
3 -
4 -
Mitglied: LianenSchwinger
05.02.2013, aktualisiert um 11:04 Uhr
@Maik87

... ich vermute zwar, dass wieder keine Rückmeldungen Deinerseits kommen ...
Aber man will ja helfen.

01.
SELECT DISTINCT a.ID, IF(c.Anz > 1, 'X', '') 
02.
FROM tabelle a 
03.
LEFT JOIN (SELECT b.ID, COUNT(b.ID) AS Anz 
04.
           FROM tabelle b 
05.
           WHERE b.Kennz = 'X' 
06.
           GROUP BY b.ID) c USING (ID)
G Jörg
Bitte warten ..
Mitglied: Maik87
05.02.2013 um 11:06 Uhr
Zitat von LianenSchwinger:
@Maik87

... ich vermute zwar, dass wieder keine Rückmeldungen Deinerseits kommen ...
Aber man will ja helfen.

Was soll das denn heißen? ;)
Es kommt was - auch wenn manchmal später. Habe im Moment einfach zu viele Baustellen gleichzeitig - sorry.
Bitte warten ..
Mitglied: it-frosch
05.02.2013 um 11:06 Uhr
Hallo Maik87,

Hat jemand einen Tipp für mich??
ist nicht ganz einfach da die Tabelle gegen mindestens ein der Regeln (http://de.wikipedia.org/wiki/Normalisierung_%28Datenbank%29) verstößt.

die mir eine eindeutige Liste der IDs liefert, mit einem Kennzeichen, ob der Datensatz doppelt in der Tabelle
Du müsstest mal definieren was ein doppelter Datensatz für dich ist
a.ID und a.Kennzeichen gleich oder
a.ID gleich

Du hast in deiner Tabelle drei Datensätze mit der ID 2 und zwei Datensätze mit der ID 2 und dem Kennzeichen X.


select count(*),a.ID from tabelle a
group by a.ID having count(*)>1

select count(*),a.ID,a.Kennz from tabelle a
group by a.ID,a.Kennz having count(*)>1


grüße vom it-frosch
Bitte warten ..
Mitglied: Maik87
05.02.2013 um 11:28 Uhr
Zitat von it-frosch:
Hallo Maik87,

> Hat jemand einen Tipp für mich??
ist nicht ganz einfach da die Tabelle gegen mindestens ein der Regeln
(http://de.wikipedia.org/wiki/Normalisierung_%28Datenbank%29) verstößt.


Gegen welche genau? Problem ist, dass ich die Quelldaten aus SAP geliefert bekomme - da lässt sich nicht mehr soo viel dran drehen.

> die mir eine eindeutige Liste der IDs liefert, mit einem Kennzeichen, ob der Datensatz doppelt in der Tabelle
Du müsstest mal definieren was ein doppelter Datensatz für dich ist
a.ID und a.Kennzeichen gleich oder
a.ID gleich
a.ID und a.Kennzeichen gleich WENN a.Kennzeichen = 'X'

Du hast in deiner Tabelle drei Datensätze mit der ID 2 und zwei Datensätze mit der ID 2 und dem Kennzeichen X.


select count(*),a.ID from tabelle a
group by a.ID having count(*)>1

Liefert nicht alle IDs

select count(*),a.ID,a.Kennz from tabelle a
group by a.ID,a.Kennz having count(*)>1

Ebenfalls nicht das gewünschte Ergebnis ;)

grüße vom it-frosch
Bitte warten ..
Mitglied: Maik87
05.02.2013 um 11:33 Uhr
Zitat von LianenSchwinger:
01.
> SELECT DISTINCT a.ID, IF(c.Anz > 1, 'X', '') 
02.
> FROM tabelle a 
03.
> LEFT JOIN (SELECT b.ID, COUNT(b.ID) AS Anz 
04.
>            FROM tabelle b 
05.
>            WHERE b.Kennz = 'X' 
06.
>            GROUP BY b.ID) c USING (ID) 
07.
> 


Funktionier super. Vielen Dank!
Muss ich nur noch ein wenig an der Performance arbeiten. Ziemlich lahm die Abfrage ;)
Bitte warten ..
Mitglied: Biber
05.02.2013, aktualisiert um 23:58 Uhr
Moin Maik87,

Zitat von Maik87:
Funktionier super. Vielen Dank!
Muss ich nur noch ein wenig an der Performance arbeiten. Ziemlich lahm die Abfrage ;)
Wenn du als Ergebnis nur das brauchst, was du mit dem geposteten Statement jetzt bekommst, dann brauchst du auch nicht so umständlich abfragen:

01.
SELECT ID, 'X' as mehrAls1Datensatz 
02.
FROM tabelle 
03.
WHERE Kennz = 'X' 
04.
GROUP BY ID 
05.
Having count(ID) > 1
Macht dasselbe, nur flotter.

Grüße
Biber

P.S. Wenn deine von SAP gelieferten Daten wirklich so widersprüchlich und nicht-normalisiert kommen, dann musst du denen die falsche Anfrage für den Datenexport gegeben haben.
Hast du vielleicht gefordert "Ich möchte alle Datensätze haben, die bei euch im System sind!"?
Dann sind vielleicht auch die nicht aktiven/(logisch) gelöschten mit dabei. Anders ist für mich dieser hanebüchene Datenschiefstand nicht erklärlich (ich halte SAP zwar für dreiste Geldschneider, aber ich halte die nicht für strunzdoof).

P.P.S
habe grad gemerkt, dass ich gar nicht auf deinen frischesten kommentar geantwortet habe.
Im Neuesten kommentar schriebst du auf Nachfrage:
(JOIN-Bedingung ist) a.ID und a.Kennzeichen gleich WENN a.Kennzeichen = 'X'

Dann mag Lianenschwingers und auch meine obige Abfrage manchmal das richtige Resultset liefert, aber nur durch Zufall.

Richtiger wäre
01.
Select b.ID, b.MehrAls1Child 
02.
From tabelleParent a, 
03.
   (SELECT ID, 'X' as mehrAls1Child 
04.
    FROM tabelleChild 
05.
    WHERE Kennz = 'X' 
06.
    GROUP BY ID 
07.
    Having count(ID) > 1) b 
08.
Where a.id=b.Id and a.Kennzeichen ='X'
Aber dach spiegelt auch nicht den fachlichen Zusammenhang wieder, denn abgebildet werden muss ja der JOIN/die Gleichheit von zwei Feldern. Also:

01.
Select distinct b.ID, b.MehrAls1Child 
02.
From tabelleParent a, 
03.
   (SELECT ID, kennz, 'X' as mehrAls1Child 
04.
    FROM tabelleChild 
05.
    WHERE Kennz = 'X' 
06.
    GROUP BY ID , kennz 
07.
    Having count(ID) > 1) b  
08.
Where a.id=b.Id and a.Kennzeichen =b.kennz
Was daran Zweit frisst ist das (vermutlich leider nötige) DISTINCT - wenn in der TabelleParent IDs mehrfach vorkommen können, dann können logischerweise auch Kombinationen von ID und Kennzeichen mehrfach auftreten.
Bitte warten ..
Mitglied: LianenSchwinger
06.02.2013 um 07:07 Uhr
Hallo Biber, hallo Maik87,

ich hatte das so verstanden, dass erstmal alle ID's einmalig im Resultat (daher DISTINCT) auftauchen und zusätzlich ein 'X' in der Spalte Kennz. wenn die Kombination ID und 'X' mehr als einmal in der Ausgangstabelle vorkommt.

Maik87 korrigiere mich wenn ich falsch liege. Ich hoffe aber, dass mein Ergebniss nicht nur "manchmal" richtig ist.

G Jörg
Bitte warten ..
Mitglied: Maik87
06.02.2013 um 10:35 Uhr
ich hatte das so verstanden, dass erstmal alle ID's einmalig im Resultat (daher DISTINCT) auftauchen und zusätzlich ein
'X' in der Spalte Kennz. wenn die Kombination ID und 'X' mehr als einmal in der Ausgangstabelle vorkommt.

Genau so und nicht anders

Zu SAP:
SAP bietet die Möglichkeit, Daten über eine BW (Business-Warehouse) Schnittstelle nach Excel zu transportieren. Es ist quasi eine DragAndDrop-Datenbankschnittstelle. Daher kann man dem Hersteller keine Schuld zuweisen, auch nicht dem Programmierer oder dem Anwender.

Meine Abfrage sie so aus:
Ich habe (unter anderem) die Felder Planstelle, Mitarbeiter, Kennzeichen-Teilzeit.
Sitzen nun mehrere Mitarbeiter auf einer Planstelle, so kommt diese (ID) mehrfach vor.

Nun möchte ich eine Auflistung aller Planstellen haben, zusätzlich mit dem Hinweis, ob mehr als eine Teilzeitkraft darauf sitzt oder nicht.
Bitte warten ..
Mitglied: LianenSchwinger
06.02.2013 um 10:49 Uhr
Hallo Maik87,

anhand Deiner Beschreibung der Abfrage wird das ganze viel verständlicher. Vielleicht beim nächsten mal direkt so die Frage formulieren.

Bin mir jetzt nicht sicher, aber folgendes müsste auch funktionieren (und schneller sein)

01.
SELECT a.id, IF(SUM(IF(a.kennz = 'X', 1, 0)) > 1, 'X', '') AS Anz 
02.
FROM tabelle AS a 
03.
GROUP BY a.id
G Jörg
Bitte warten ..
Mitglied: Maik87
25.02.2013 um 13:34 Uhr
Daumen hoch!

So läufts perfekt - Danke!!
Bitte warten ..
Ähnliche Inhalte
Datenbanken
MySQL Trigger - Zählen von Zeilen (Count) und "Überwachen" einer Spalte
Frage von Oli-nuxDatenbanken3 Kommentare

Hallo, habe ein Problem und kann es leider selber mit MySQL Trigger nicht lösen. In der MySQL-DB bzw. in ...

Windows Tools
Performance Counter weg
gelöst Frage von emeriksWindows Tools2 Kommentare

Hi, ich habe hier einen Win2008-R2-Server (Server1), bei welchem ich über den Performance Counter "Process" keine Prozesse angezeigt bekomme, ...

Datenbanken
MSSQL: Where durch Variable ändern
gelöst Frage von PCFJKGDatenbanken11 Kommentare

Ich versuche in Abhängigkeit von einer Variablen eine Abfragebedingung zu ändern: SELECT COUNT(*) FROM SQL-Tabelle WHERE IIF (@Variable IS ...

Batch & Shell
Zwei Counter in einer Batch
Frage von mR.HotixBatch & Shell1 Kommentar

Guten Tag. Ich habe gerade zwei Counter in meiner Batch Datei reingemacht und beide haben drei versuche. Beim Benutzername ...

Neue Wissensbeiträge
Internet

Was nützt HTTPS, wenn es auch von Phishing Web-Seiten genutzt wird

Information von Penny.Cilin vor 2 TagenInternet17 Kommentare

HTTPS richtig einschätzen Ob man eine Webseite via HTTPS aufruft, zeigt ein Schloss neben der Adresse im Webbrowser an. ...

Webbrowser

Bugfix für Firefox Quantum released - Installation erfolgt teilweise nicht automatisch!

Erfahrungsbericht von Volchy vor 3 TagenWebbrowser7 Kommentare

Hallo zusammen, gem. dem Artike von heise online wurde mit VersionFirefox 57.0.1 sicherheitsrelevante Bugs behoben. Entgegen der aktuellen Veröffentlichung ...

Sicherheit

Teamviewer Sessions können gekapert werden - Update tw. verfügbar

Information von sabines vor 3 TagenSicherheit6 Kommentare

In bestimmten Konstellationen können Teamviewer Sessions gekapert werden, wahrscheinlich aber ein recht unwahrscheinliches Szenario. Da der Teamviewer gerne für ...

Digitiales Fernsehen

Apple TV: Amazon Prime App ist verfügbar

Information von Frank vor 4 TagenDigitiales Fernsehen4 Kommentare

Die Amazon Prime Video App kann ab sofort auf einem Apple TV ab der 3 Generation installiert werden. Einfach ...

Heiß diskutierte Inhalte
Vmware
Installation Windows 10 VMware
Frage von Ghost108Vmware17 Kommentare

Hallo zusammen, versuche gerade mit Hilfe des vshpere clients eine virtuelle Windows 10 maschine aufzusetzen. 1. virtuelle Maschine erstellt ...

Exchange Server
SBS 2011 E-Mails können gesendet werden, aber nicht von extern empfangen
Frage von andreas1234Exchange Server14 Kommentare

Hallo Community, ich habe das Problem, dass seit knapp zwei Wochen die E-Mails von meinem SBS 2011 einwandfrei gesendet ...

Voice over IP
Telefonstörung - Ortsrufnummern kein Verbindungsaufbau
Frage von Windows10GegnerVoice over IP10 Kommentare

Hallo, sowohl bei uns als auch beim Opa ist es über VoIP nicht möglich Ortsrufnummern anzurufen. Es kommt nach ...

Windows Server
Server 2012 über Eingabeaufforderung devmgmt.msc geht nicht
gelöst Frage von achim222Windows Server9 Kommentare

Hallo, ich habe hier einen Server 2012 der im Reparaturmodus startet. Es liegt an einem falschen VirtIO Treiber für ...