bin noch recht neu was SQL angeht und habe ein einfaches Problem:
select
A.ID
sum(B.zähler* 100) / sum(B.nenner) as bruch,
from
table1 A
join table2 B on A.ID = B.ID
where
bruch > 0
group by
A.ID
Das funktioniert nicht, weil es keine Spalte bruch gibt, aber Aggregate darf ich da ja auch nicht benutzen. Weiß jemand, wie ich das bekomme, was ich will?
Du hast irgendwie ein grundlegenderes Verständnisproblem, denke ich. Die Aggregatfunktion darfst du darum nicht verwenden weil Aggregatfunktionen sowieso nur genau ein Ergebnis zurück liefern. Demzufolge gibt es nichts, was du mittels WHERE einschränken müsstest.
Wenn du das mit einer anderen Menge joinen willst, solltest du über Subselects nachdenken. Allerdings ist mir auch nicht ganz klar, was du konkret erreichen willst.
okay, zum Beispiel gibt mir B.nenner prozentual an, wie oft ich von allen Würfelversuchen meiner DB eine Augenzahl kleiner als 3 geworfen hab.
B.zähler gibt mir dann an, wie oft mein Ergebnis mit einem zweiten Wurf kleiner als 6 war (auch prozentual).
Und jetzt möchte ich in meiner Ergebnistabelle nach diesem Wert (zähler/nenner) filtern können und nur die A.IDs aufführen, die dem Filter entsprechen. Man müsste dann irgendwie sowas angeben können wie bruch > 0,5 oder was auch immer.
Dass da irgendwie count ins Spiel kommen muss, ist ja klar, nur das zählt doch die Spalten der kompletten Tabelle, wie kann ich da Spalten mit gleichen Werten gruppieren und zählen?
sx=> SELECT * FROM grouptest;
t
---
A
A
A
B
B
C
C
C
(8 Zeilen)
sx=> SELECT t, count(*) FROM grouptest GROUP BY t ORDER BY t;
t | count
---+-------
A | 3
B | 2
C | 3
(3 Zeilen)
Du solltest dich intensiver mit SQL auseinander setzen.
Also irgendwie funktioniert das in meiner Abfrage nicht. Wenn ich folgende Abfrage ohne das count ausführe, bekomme ich schön alle Werte in einer Spalte ausgegeben und wenn ich das count dazunehme, hab ich pro Wert auch nur eine Spalte mit einer Anzahl dahinter, die aber nicht stimmt.
Z.B. hab ich ohne das count in meiner Ausgabe genau 3x die Spalte mit Wert “A” drin, krieg aber mit count 81x angezeigt o0
select
C.hole_cards,
count(C.hole_cards)
from
holdem_hand_player_detail D
join holdem_hand_player_statistics S on D.id_hand = S.id_hand and D.id_player = S.id_player
join lookup_hole_cards C on C.id_holecard = S.id_holecard
join holdem_limit L on S.id_limit = L.id_limit
join holdem_cache CC on CC.id_player = D.id_player
where
S.flg_p_squeeze AND
L.id_limit = 6 OR L.id_limit = 8 AND
D.id_player != 1423
group by
C.hole_cards
having sum(CC.cnt_vpip * 100) / sum(CC.cnt_hands) > 15 AND
sum(CC.cnt_pfr * 100) / sum(CC.cnt_hands) > 10 AND
sum(CC.cnt_vpip * 100) / sum(CC.cnt_hands) - sum(CC.cnt_pfr * 100) / sum(CC.cnt_hands) <= 10 AND
sum(CC.cnt_hands) > 50
order by C.hole_cards
Naja da ist jetzt nix besonderes und das dauert auch ziemlich lange, da die DB recht groß ist, aber zusammengefasst hab ich in der Version ohne count einfach jede Starthand aufgelistet, was dann so aussieht:
AA
.
.
.
AA
AK
.
.
.
AK
AQ
.
.
.
AQ
AJ
.
.
.
und wenn ich es mit count mache, sieht es so aus
AA 123
AK 456
AQ 789
usw. Allerdings kann ich ja die Anzahl der Zeilen mit AA aus Tabelle 1 zählen und mit der Zahl in Tabelle 2 vergleichen und die stimmt nie. Genau genommen ist sie immer viel zu groß.
Ich führe die Abfragen die Tage nochmal aus und reiche sie dann nach.