HQL / SQL根据计数选择前10条记录

use*_*220 5 mysql sql hibernate hql

我有2张桌子:

CATEGORY (id)
POSTING (id, categoryId)
Run Code Online (Sandbox Code Playgroud)

我正在尝试编写HQL或SQL查询来查找发布次数最多的前10个类别。

感谢帮助。

Baz*_*nga 5

SQL查询:

SELECT  c.Id, sub.POSTINGCOUNT
FROM CATEGORY c where c.Id IN
( 
    SELECT TOP 10 p.categoryId
    FROM POSTING p
    GROUP BY p.categoryId 
    order by count(1) desc
)
Run Code Online (Sandbox Code Playgroud)

总部:

Session.CreateQuery("select c.Id
        FROM CATEGORY c where c.Id IN
        ( 
            SELECT  p.categoryId
            FROM POSTING p
            GROUP BY p.categoryId 
            order by count(1) desc
        )").SetMaxResults(10).List();
Run Code Online (Sandbox Code Playgroud)

http://sqlinthewild.co.za/index.php/2010/01/12/in-vs-inner-join/


Mah*_*mal 1

在 SQL 中你可以这样做:

SELECT c.Id, sub.POSTINGCOUNT
FROM CATEGORY c 
INNER JOIN 
( 
    SELECT p.categoryId, COUNT(id) AS 'POSTINGCOUNT'
    FROM POSTING p
    GROUP BY p.categoryId
) sub ON c.Id = sub.categoryId
ORDER BY POSTINGCOUNT DESC
LIMIT 10
Run Code Online (Sandbox Code Playgroud)