Sql 数多对多

Sql 数多对多,sql,grails,count,many-to-many,hql,Sql,Grails,Count,Many To Many,Hql,我在联系人和项目之间有多对多的关联 contact: +-----------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------------+--------------+------+-----+---------+----------------

我在
联系人
项目
之间有多对多的关联

contact:
+-----------------+--------------+------+-----+---------+----------------+
| Field           | Type         | Null | Key | Default | Extra          |
+-----------------+--------------+------+-----+---------+----------------+
| id              | int(11)      | NO   | PRI | NULL    | auto_increment |
+-----------------+--------------+------+-----+---------+----------------+

project:
+-------------------+--------------+------+-----+---------+----------------+
| Field             | Type         | Null | Key | Default | Extra          |
+-------------------+--------------+------+-----+---------+----------------+
| id                | int(11)      | NO   | PRI | NULL    | auto_increment |
+-------------------+--------------+------+-----+---------+----------------+

project_contact:
+---------------+---------+------+-----+---------+-------+
| Field         | Type    | Null | Key | Default | Extra |
+---------------+---------+------+-----+---------+-------+
| project_id    | int(11) | NO   | PRI | NULL    |       |
| contact_id    | int(11) | NO   | PRI | NULL    |       |
+---------------+---------+------+-----+---------+-------+
我想计算有多少联系人与无项目、一个项目或多个项目关联。如果我能在一个查询中得到它,那将是非常棒的,如果不能,三个不同的查询也可以

PS:我正在使用HQL,但是我在将SQL转换为HQL时不会有问题

谢谢

我称之为“直方图直方图”查询。它基本上是聚合之上的聚合:

select NumProjects, count(*) as NumContacts
from (select c.id, count(pc.contact_id) as NumProjects
      from contacts c left join
           project_contacts pc
           on pc.contact_id = c.id
      group by c.id
     ) c
group by NumProjects
order by NumProjects;
我称之为“直方图”查询。它基本上是聚合之上的聚合:

select NumProjects, count(*) as NumContacts
from (select c.id, count(pc.contact_id) as NumProjects
      from contacts c left join
           project_contacts pc
           on pc.contact_id = c.id
      group by c.id
     ) c
group by NumProjects
order by NumProjects;

您可以使用HQL或条件查询。假设域模型与此类似

class Project {
    static hasMany = [contact: Contact]
}

class Contact {
    static hasMany = [project: Project]
    static belongsTo = Project
}
HQL 条件查询
您可以使用HQL或条件查询。假设域模型与此类似

class Project {
    static hasMany = [contact: Contact]
}

class Contact {
    static hasMany = [project: Project]
    static belongsTo = Project
}
HQL 条件查询
不幸的是,联系人表中有一组
ProjectContact
元素,而不是一组项目,但谢谢您!不幸的是,联系人表中有一组
ProjectContact
元素,而不是一组项目,但谢谢您!