À l'aide de groupProperty et countDistinct dans Graal Critères
Je suis en utilisant le Graal 1.2.4. Je voudrais savoir comment puis-je trier par "countDistinct" (descendant) et avec groupProperty à l'intérieur d'une des projections.
Voici mes domaines:
class Transaction {
static belongsTo = [ customer : Customer, product : Product ]
Date transactionDate = new Date()
static constraints = {
transactionDate(blank:false)
}
}
class Product {
String productCode
static constraints = {
productCode(blank:false)
}
}
Dans MySQL, c'est ce que je veux:
select
product_id,
count(product_id)
from
transaction
group by
product_id
order by
count(product_id) desc
En terme général, je voudrais obtenir une liste de produits (ou juste une id de produit) triés par le nombre de transactions un produit (décroissant)
C'est ma conjecture:
def c = Transaction.createCriteria() def transactions = c.list {
projections {
groupProperty("product")
countDistinct("product")
}
maxResults(pageBlock)
firstResult(pageIndex) }
def products = transactions.collect { it[0] }
Mais il ne donne pas mon résultat escompté. Toute initiative de ce sera très appréciée. Merci!
OriginalL'auteur firnnauriel | 2010-09-15
Vous devez vous connecter pour publier un commentaire.
Essayez ceci:
À vos critères de requête est en fait équivalent à:
Note distinctes. Vous souhaitez compter le nombre de transactions distinctes par produit, afin de comptage de l'id de transaction (ou transaction de propriété) a plus de sens. Id de produit arrive juste à travailler sans la clause distinct.
Vous pouvez activer le super utile hibernate, SQL journalisation de débogage ce genre de problème. Il va vous montrer exactement comment vos critères sont transformés en SQL. Au moment de l'exécution:
ou de le jeter dans votre Config.groovy:
EDIT: utiliser
countDistinct("id", "transactionCount")
comme la projection etorder("transactionCount")
va trier par le comte.OriginalL'auteur ataylor