Sql-Server
在 hql 中加入兩個子查詢
如何將這個 sql 查詢寫成 hql:
select count(distinct s.id) as prepaid, count(distinct ss.id) as postpaid from (select * from subscriber where subscriber.ispostpaid=0) s join (select * from subscriber where ispostpaid=1) ss where s.subscriber_status='active';
或者可以通過僅使用子查詢而不使用連接來進行此查詢。
假設我了解您要返回的內容,並假設
subscriber.id
在表中是唯一的(似乎很可能),這是一個 SQL Server 答案(儘管它應該適用於 MySQL):select isnull(sum((case when s.ispostpaid = 0 and s.subscriber_status = 'active' then 1 else 0 end)), 0) as prepaid, isnull(sum((case when s.ispostpaid = 1 then 1 else 0 end)), 0) as postpaid from subscriber s;
這有選擇地使用一個表訪問來計算感興趣的行,而不是在原始查詢中進行昂貴的交叉連接和分組。如果表為空,則使用
ISNULL
is 仍返回 0 計數。使用 NHibernate,我相信這也可以使用
ICriteria
… 編寫,但我已經有一段時間了。在此處查看我的答案,因為如果您正在尋找它可能會有所幫助。
嘗試這個..
SELECT CASE WHEN ispostpaid=0 AND subscriber_status='active' THEN COUNT(DISTINCT S.ID) END AS PrePaid, CASE WHEN ispostpaid=1 THEN COUNT(DISTINCT S.ID) END AS PostPaid FROM Subscriber GROUP BY ispostpaid