Problem mit SELECT COUNT
Thomas
- datenbank
0 Sven Rautenberg0 Thomas0 Roger0 Sven Rautenberg
0 Tom
Hallo,
ich habe folgendes Problem: aus einer bestehenden MySQL-Tabelle möchte ich herausfinden, wieviele Zeilen von verschiedenen Spalten einen Wert enthalten. Das geht ja grundsätzlich mit SELECT COUNT (*).
Allerdings möchte ich die Ergebnisse mit entsprechender Benennung nebeneinander haben und nicht (nur mit Benennung des ersten Feldes) untereinander.
Konkret sieht meine SQL-Abfrage so aus:
SELECT COUNT (*) AS T1
FROM table1
WHERE bla1 BETWEEN 3 AND 12
UNION SELECT COUNT (*) AS T2
FROM table1
WHERE bla2 BETWEEN 3 AND 12
GROUP BY bla1, bla2
Was mache ich falsch?
Danke schon mal,
Gruß
Thomas
Moin!
ich habe folgendes Problem: aus einer bestehenden MySQL-Tabelle möchte ich herausfinden, wieviele Zeilen von verschiedenen Spalten einen Wert enthalten. Das geht ja grundsätzlich mit SELECT COUNT (*).
Allerdings möchte ich die Ergebnisse mit entsprechender Benennung nebeneinander haben und nicht (nur mit Benennung des ersten Feldes) untereinander.
Kannst du dein gewünschtes Ergebnis mal als Tabelle aufskizzieren. Ich kann mir gerade nicht so gut vorstellen, was du als Ergebnis haben willst.
Nur so als Vermutung: UNION wird dir vermutlich wenig helfen, weil es Einzelergebnisse nicht "nebeneinander" packt, sondern untereinander.
- Sven Rautenberg
Moin!
ich habe folgendes Problem: aus einer bestehenden MySQL-Tabelle möchte ich herausfinden, wieviele Zeilen von verschiedenen Spalten einen Wert enthalten. Das geht ja grundsätzlich mit SELECT COUNT (*).
Allerdings möchte ich die Ergebnisse mit entsprechender Benennung nebeneinander haben und nicht (nur mit Benennung des ersten Feldes) untereinander.
Kannst du dein gewünschtes Ergebnis mal als Tabelle aufskizzieren. Ich kann mir gerade nicht so gut vorstellen, was du als Ergebnis haben willst.
Nur so als Vermutung: UNION wird dir vermutlich wenig helfen, weil es Einzelergebnisse nicht "nebeneinander" packt, sondern untereinander.
- Sven Rautenberg
Hmmm, wenn UNION nicht geht - gibts dann eine andere Alternative?
Was ich haben möchte, ist folgendes:
ALT:
Spalte1 | Spalte2 | Spalte3 | Spalte4
1 0 3 2
4 2 7 1
5 1 0 0
3 8 4 7
0 5 3 9
Ich möchte jetzt beispielsweise alle Werte pro Spalte, die >= 3 und <= 7 sind und dazu auch entsprechend benannte Spaltennamen:
Ziel1 | Ziel2 | Ziel3 | Ziel4
3 1 4 1
Das muß doch gehen?!
Danke + Gruß
Thomas
moin!
mit count(spaltenname) kannst du imho die werte pro spalte zählen.
gruß.
roger.
Moin!
Hmmm, wenn UNION nicht geht - gibts dann eine andere Alternative?
JOIN.
Ich möchte jetzt beispielsweise alle Werte pro Spalte, die >= 3 und <= 7 sind und dazu auch entsprechend benannte Spaltennamen:
Ziel1 | Ziel2 | Ziel3 | Ziel4
3 1 4 1Das muß doch gehen?!
Indem du die Tabelle viermal miteinander joinst. Oder (was einfacher sein dürfte) viermal die Tabelle einzeln abfragst.
Datenbanken sind zeilenorientiert. Wenn du mit einer WHERE-Bedingung also die Datensätze eingrenzt, selektierst du damit immer eine Teilmenge aller vorhandenen Datensätze.
Diese Teilmenge kann von "null" Datensätzen bis hin zu "allen" Datensätzen gehen.
Und mit diesem Ergebnis kannst du dann diverse Zählungen veranstalten.
Das, was du aber willst: Du willst für jede Spalte individuell die Anzahl zutreffender Datensätze bzw. Zeilen feststellen. Das geht nur mit individuellen WHERE-Bedingungen je Spalte. Denn du kannst in einer einzelnen Bedingung ja nur mit AND und OR verknüpfen, erhieltest dann eine gewisse Anzahl an Spalten, und könntest die zählen - das Ergebnis wäre je Spalte identisch (weil ja gleichviele Zeilen in jeder Spalte selektiert wurden.
Deshalb: Entweder JOIN oder vier Einzelabfragen (wobei die Einzelabfragen sicher schneller programmiert sind).
- Sven Rautenberg
Hello,
Konkret sieht meine SQL-Abfrage so aus:
SELECT COUNT (*) AS T1
FROM table1
WHERE bla1 BETWEEN 3 AND 12
UNION SELECT COUNT (*) AS T2
FROM table1
WHERE bla2 BETWEEN 3 AND 12
GROUP BY bla1, bla2
Kann MySQL inzwischen Union subselects?
Grüße
Tom