0
votes

Opération non valide: colonne "[Nom de colonne]" doit apparaître dans le groupe par clause ou être utilisé dans une fonction globale;

J'ai lu presque 10+ questions relatives à la mienne, mais personne n'a travaillé dans mon cas. Comme j'ai 3 tables dans ma dB et j'essaie de calculer la vente d'eux par rapport au temps (vente annuelle). où j'ai besoin de groupe par ma requête par date_added . Dans MySQL Cela a fonctionné bien et donnez-moi un bon résultat mais à Redshift je suis coincé.

requête MySQL : xxx

cette requête MySQL fonctionne très bien mais quand je le convertit au format postgre de Redshift, il me donne une erreur de Opération non valide: la colonne "O.Date_Added" doit apparaître dans le groupe par clause ou être utilisée dans une fonction d'agrégat;

Query postgres : xxx

existe une erreur de syntaxe dans la requête postgre et pourquoi j'ai besoin d'ajouter o.date_added dans groupe par


0 commentaires

3 Réponses :


1
votes

Votre de la clause a o.date_added . La commande par est terminée une fois la requête terminée.

Vous pouvez utiliser: xxx

aussi, vous pouvez supprimer les parenthèses supplémentaires de la groupe par : xxx

DB-FIDDLE

Voir RedShift Documentation pour l'utilisation de () fonction. Utilisez getdate () à la place, comme le maintenant () semble être obsolète .


6 commentaires

Il donne une erreur `Opération invalide: Impossible d'identifier un opérateur de commande pour le type d'enregistrement;`


Passez-vous la commande par des colonnes comme variable? Voir DB-Fiddle. En outre, vous n'avez pas mentionné la version de PostgreSQL que vous utilisez.


Sir Postgres Version 8.0.2 (J'utilise dans AWS Redshift).


Pourrait être une autre erreur déclenchée par la version PostgreSQL de Redshift. Essayez de supprimer les parenthèses supplémentaires du groupe par . Voir DB-Fiddle.


Merci d'être avec moi ... j'ai copié votre requête.match tout, mais encore une nouvelle erreur .. Opération non valide: types ou fonctions spécifiés (un par message d'information) non pris en charge sur les tables de redshift.;


OK, c'est une erreur différente et indique comment redshift permet une utilisation de la fonction uniquement sur le nœud de leader. Le principal suspect de votre requête serait la fonction () . Voir le lien de documentation.



0
votes

une colonne dans un Commande par code> Clause dans une requête contenant Groupe par code> Fonctionne comme s'il était mentionné dans la clause code> code>.

Vous avez P>

ORDER BY
    MONTH(o.date_added) ASC,
    YEAR(o.date_added) ASC   


1 commentaires

Sir il donne une erreur Opération invalide: Impossible d'identifier un opérateur de commande pour l'enregistrement de type;



0
votes

J'ai trouvé l'erreur.I Utilisé SQL Workbench et obtenez l'erreur sur () code> fonction que j'utilisais dans mon postgre code> requête.

Simplement, i Jutts remplacé par maintenant () code> avec actuel_date code> et les choses fonctionnaient pour moi. En outre, j'obtiens une erreur pour limite 0, 25 code> mais dans PostGre, ils autorisent limite 25 [décalage n] code>. P>

MAINTENANT Ressemble à la question: P>

SELECT
EXTRACT(MONTH FROM o.date_added) AS month,
EXTRACT(YEAR FROM o.date_added) AS year,
COUNT(o.order_id) AS orders
FROM
orders o  
LEFT JOIN
(
    SELECT
        op.order_id,
        SUM(op.quantity) AS op_qty,
        SUM(op.total) AS total,
        SUM(op.cost) AS cost            
    FROM
        order_product op 
    GROUP BY
        op.order_id
) op 
    ON op.order_id = o.order_id             
LEFT JOIN
(
    SELECT
        order_id                       
    FROM
        order_total 
    WHERE
        1 
    GROUP BY
        order_id
) ot 
    ON ot.order_id = o.order_id                        
WHERE
(
    DATE(o.date_added) >= CURRENT_DATE + interval '-24 month' 
    AND DATE(o.date_added) <= DATE(CURRENT_DATE)
)                              
GROUP BY EXTRACT(MONTH FROM o.date_added), EXTRACT(YEAR FROM o.date_added)
ORDER BY year ASC, month ASC LIMIT 25


0 commentaires