Preciso de calcular o úmero de leilões altamente disputados (em que o número de bids é superior à média global de bids por leilão). Tenho duas tabelas: Auction (auction_id, creator, deadline) e Bid (bid_id, bidder, bid_auction).
Achei melhor fazer uma consulta em SQL para obter a resposta e depois tentar passar de SQL para JPQL. Em SQL fiz da seguinte forma:
SELECT COUNT(*) FROM (
SELECT
COUNT(bid.bid_auction) AS Total
FROM
auction
LEFT JOIN bid ON bid.bid_auction = auction.auction_id
GROUP BY auction.auction_id having Total > (
SELECT AVG(Total) FROM (
SELECT
COUNT(bid.bid_auction) AS Total
FROM
auction
LEFT JOIN bid ON bid.bid_auction = auction.auction_id
GROUP BY auction.auction_id)MyTabel1))MyTabel2;
Mas depois, quando tentei passar para JPQL não consegui.
Algum me pode ajudar?
Fiz da seguinte forma:
@NamedQuery(name = "Bid.findByPlusAvgBids", query = "SELECT COUNT(a) FROM "
+ "(SELECT COUNT(b.bid_auction) AS t FROM Auction a LEFT JOIN b ON b.bid_auction =: a.auction_id "
+ " GROUP BY a.auction_id HAVING t > (SELECT AVG(t) FROM ( SELECT COUNT(b.bid_auction) AS t "
+ " FROM Auction a LEFT JOIN b ON b.bid_auction =: a.auction_id GROUP BY a.auction_id"),