JPA/Hibernate で以下のようなクエリを実行することは可能ですか?
select v.country,
v.site,
SUM(case when s.id = 1 then 1 else 0 end) as Total_SuspectedViolations,
SUM(case when s.id = 2 then 1 else 0 end) as Total_ConfirmedViolations,
SUM(case when s.id = 3 then 1 else 0 end) as Total_ConfirmedNoViolations,
SUM(case when s.id = 4 then 1 else 0 end) as Total_NotDetermined,
COUNT(*) Total
from violations v
inner join status s
on v.status_id = s.id
group by v.country, v.site
また
select v.country,
v.site,
SUM(case when v.status_id = 1 then 1 else 0 end) as Total_SuspectedViolations,
SUM(case when v.status_id = 2 then 1 else 0 end) as Total_ConfirmedViolations,
SUM(case when v.status_id = 3 then 1 else 0 end) as Total_ConfirmedNoViolations,
SUM(case when v.status_id = 4 then 1 else 0 end) as Total_NotDetermined,
COUNT(*) Total
from violations v
group by v.country, v.site
これは Oracle DB で機能しますが、JPA/Hibernate を使用している場合は次のようになります。
ERROR [PARSER] line 1:311: unexpected token: total
ERROR [PARSER] line 1:375: unexpected token: ON
1つのテーブル「違反」のデータに基づいていくつかの簡単な統計を実装する必要があるため、私は尋ねています
以下は私の考えです:
列を持つ統計テーブルのような効果を得るには、2 つのテーブルを結合し、2 番目のテーブルのいくつかの値の発生をカウントする必要があります。
結果表:
- 国 varchar(20),
- サイト varchar(20)、
- pseudo_violation ロング、
- confirmed_violation ロング、
- confirmed_no_violation ロング、
- not_determined ロング、
- トータルロング
私の結果テーブルには、最初のテーブル「違反」からの最初の 2 つの列 (国とサイト) が必要であり、次の 5 つの列には、ステータステーブルからの id の可能な値のそれぞれで、「違反」の status_id の発生数 (カウント) が含まれます。
そのため、既存の 2 つのテーブルがあります: Violations と Status です。
違反:
- IDロング、
- 国 varchar(20),
- サイト varchar(20)、
- status_id long、<-- これはステータス テーブルのステータスの ID です。
- ... この場合、他の列は重要ではありません
状態:
- IDロング、
- status long 列「ステータス」には、文字列値にマッピングされる値 (1 ~ 4) があります。
私の結合の結果は、列を含む必要があるテーブルを持つことです:
- 違反表から: 「国」および「サイト」
- ステータス テーブルから: 「違反の疑い」、「違反の確認」、「違反なしの確認」、「未決定」、「合計」(この列は、違反テーブルの発生回数のカウンターです)。
更新:私が知る限り、結合を使用する必要はありません。クエリは1つのテーブルでのみ実行できます。
JPA/Hibernateでそれを行う適切な方法は何ですか?