Équivalent PostgreSQL pour SQL Server GROUP BY avec ROLLUP
J'ai une Requête Sql Server qui utilise le ROLLUP
clause, lors du regroupement. J'ai envie d'une requête équivalente dans Postgres. Requête dans SQl Server est:
SELECT (CASE WHEN acnt_dba_name Is Null THEN 'Total' ELSE acnt_dba_name END) as account,
(CASE WHEN evt_name Is Null THEN '' ELSE evt_name END) as event,
COUNT(CASE reg_is_complete WHEN true THEN 1 ELSE Null END) as regsComplete,
COUNT(CASE WHEN reg_frn_pro_id > 0 AND reg_is_complete = false THEN 1 ELSE Null END) as regsInComplete,
COUNT(CASE WHEN reg_frn_pro_id > 0 THEN Null ELSE 1 END) as regsClicks
FROM registrations_view
LEFT JOIN events ON (evt_id = reg_frn_evt_id)
LEFT JOIN accounts ON (acnt_id = evt_frn_acnt_id)
WHERE reg_date_created < #CreateODBCDate(url.endDate)#
AND reg_date_created > #CreateODBCDate(url.startDate)#
AND reg_is_active = true -- only active regs
AND reg_is_test = false -- only live registrations
-- AND reg_is_denied = false -- exclude denied reg statuses (include these for now RWB 8/7/2)
GROUP BY rollup(acnt_dba_name, evt_name)
-- Sort with Nulls at the bottom
ORDER BY acnt_dba_name, evt_name
source d'informationauteur Satish Sharma
Vous devez vous connecter pour publier un commentaire.
C'est une réponse générique à l'équivalent de rouler dans Postgresql.
Donné un tableau t:
Et cette requête SQL Server: SQL Violon
C'est la façon de le faire dans Postgresql: SQL Violon
Créer de l'agrégation d'expressions de table communes a partir du détail allant vers le haut niveau:
Avis que pour la performance de la prochaine niveau des agrégats à partir de la précédente en bas niveau.
Avec qui fait juste de l'union les expressions de table communes de créer les étiquettes appropriées:
Dans Postgres 9.5 apparu GROUPING SETS, le CUBE et CUMULATIF: http://www.postgresql.org/docs/9.5/static/queries-table-expressions.html#QUERIES-GROUPING-SETS