Zum Forum springen
PostgreSQL - wie sc...
 
Benachrichtigungen
Alles löschen

PostgreSQL - wie script umschreiben?

5 Beiträge
2 Benutzer
6 Reactions
719 Ansichten
tranceactor
Beigetreten: 09.11.2006

Hi,

ich würde mich sehr freuen, wenn mir jemand helfen könnte. Ich habe ein funktionierendes script, das mir anzeigt, ob ich in den letzten 3 Minuten mind. eine Hand Poker gespielt habe. Ich nutze das script in PGadmin4 und die zugehörige DB ist von Pokertracker4.

Leider habe ich von postgresql null Ahnung. Ich würde dieses script aber gerne umschreiben, dass es mir die Anzahl der gespielten Hände in den letzten 3 Minuten anzeigt.
Ich würde mich sehr über jede Hilfe sehr freuen und gerne auch erkenntlich zeigen. Ach ja, nicht sicher, inwieweit das relevant ist für die Syntax, aber Pokertracker unterstützt nur bis Postgresql11. Syntax für aktuellere Versionen funktioniert evtl nicht

SELECT
CASE
WHEN (EXISTS ( SELECT 1
FROM cash_hand_player_statistics, player, player player_real
WHERE player.id_player = cash_hand_player_statistics.id_player
AND player_real.id_player = cash_hand_player_statistics.id_player_real
AND (cash_hand_player_statistics.id_player IN ( SELECT player_1.id_player
FROM player player_1
WHERE player_1.player_name_search = 'xxxxx'::text AND player_1.id_site = '100'::smallint
UNION
SELECT player_1.id_player
FROM player player_1
WHERE player_1.id_player_alias <> '0'::smallint))
AND cash_hand_player_statistics.id_gametype <> 1
AND cash_hand_player_statistics.date_played >= (timezone('UTC'::text, now()) - '00:03:00'::interval)
AND cash_hand_player_statistics.date_played <= timezone('UTC'::text, now())
GROUP BY cash_hand_player_statistics.id_player, player.player_name)) THEN 1
ELSE 0
END AS "case";


Antwort
Zitat
4 Antworten
bumblebeebee
Beigetreten: 06.06.2006

probier mal

SELECT count(*) FROM ( SELECT *
                       FROM cash_hand_player_statistics, player, player player_real
                       WHERE player.id_player = cash_hand_player_statistics.id_player
                         AND player_real.id_player = cash_hand_player_statistics.id_player_real
                         AND (cash_hand_player_statistics.id_player IN ( SELECT player_1.id_player
                                                                         FROM player player_1
                                                                         WHERE player_1.player_name_search = 'xxxxx'::text AND player_1.id_site = '100'::smallint
                                                                         UNION
                                                                         SELECT player_1.id_player
                                                                         FROM player player_1
                                                                         WHERE player_1.id_player_alias <> '0'::smallint))
                         AND cash_hand_player_statistics.id_gametype <> 1
                         AND cash_hand_player_statistics.date_played >= (timezone('UTC'::text, now()) - '00:03:00'::interval)
                         AND cash_hand_player_statistics.date_played <= timezone('UTC'::text, now())
                       GROUP BY cash_hand_player_statistics.id_player, player.player_name) as subquery;

Antwort
Zitat
tranceactor
Beigetreten: 09.11.2006

Vielen Dank. Ich bekomme aber leider eine Fehlermeldung

ERROR: column "cash_hand_player_statistics.id_hand" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: SELECT count(*) FROM ( SELECT *
^
SQL state: 42803
Character: 31

Ich habe den Fehler mal ohne Ahnung "beseitigt", indem ich das bei group by reingeschrieben habe. Dann passierte das noch 3 Mal mit quasi derselben Fehlermeldung und ich habe die letzte Zeile zu folgendem verändert (Rest unverändert)

SELECT count(*) FROM ( SELECT *
FROM cash_hand_player_statistics, player, player player_real
WHERE player.id_player = cash_hand_player_statistics.id_player
AND player_real.id_player = cash_hand_player_statistics.id_player_real
AND (cash_hand_player_statistics.id_player IN ( SELECT player_1.id_player
FROM player player_1
WHERE player_1.player_name_search = 'xxxxx'::text AND player_1.id_site = '100'::smallint
UNION
SELECT player_1.id_player
FROM player player_1
WHERE player_1.id_player_alias <> '0'::smallint))
AND cash_hand_player_statistics.id_gametype <> 1
AND cash_hand_player_statistics.date_played >= (timezone('UTC'::text, now()) - '00:50:00'::interval)
AND cash_hand_player_statistics.date_played <= timezone('UTC'::text, now())
GROUP BY cash_hand_player_statistics.id_player, player_real.id_player, cash_hand_player_statistics.id_hand, player.id_player, player.player_name) as subquery;

und es funktioniert :f_love::f_drink:

Vielen herzlichen Dank! Kann ich mich irgendwie erkenntlich zeigen?


Antwort
Zitat
bumblebeebee
Beigetreten: 06.06.2006

Super, freut mich :f_drink:
Wenn du magst, spende einen Betrag deiner Wahl an eine gemeinnützige Organisationen deiner Wahl.


Antwort
Zitat
tranceactor
Beigetreten: 09.11.2006

Super. Nochmals vielen Dank


Antwort
Zitat