Mysql中带有count()的不等式

时间:2016-10-08 16:03:43

标签: mysql sql count many-to-many

我有以下结构:

Table Author :
idAuthor,
Name 

+----------+-------+
| idAuthor | Name  |
+----------+-------+
|        1 | Renee |
|        2 | John  |
|        3 | Bob   |
|        4 | Bryan |
+----------+-------+
Table Publication:
idPublication,
Title,
Type,
Date,
Journal,
Conference
+---------------+--------------+------+-------------+------------+-----------+
| idPublication | Title        | Date | Type        | Conference | Journal   |
+---------------+--------------+------+-------------+------------+-----------+
|             1 | Flower thing | 2008 | book        | NULL       | NULL      |
|             2 | Bees         | 2009 | article     | NULL       | Le Monde  |
|             3 | Wasps        | 2010 | inproceding | KDD        | NULL      |
|             4 | Whales       | 2010 | inproceding | DPC        | NULL      |
|             5 | Lyon         | 2011 | article     | NULL       | Le Figaro |
|             6 | Plants       | 2012 | book        | NULL       | NULL      |
|             7 | Walls        | 2009 | proceeding  | KDD        | NULL      |
|             8 | Juices       | 2010 | proceeding  | KDD        | NULL      |
|             9 | Fruits       | 2010 | proceeding  | DPC        | NULL      |
|            10 | Computers    | 2010 | inproceding | DPC        | NULL      |
|            11 | Phones       | 2010 | inproceding | DPC        | NULL      |
|            12 | Creams       | 2010 | proceeding  | DPC        | NULL      |
|            13 | Love         | 2010 | proceeding  | DPC        | NULL      |
+---------------+--------------+------+-------------+------------+-----------+

Table author_has_publication :
Author_idAuthor,
Publication_idPublication
+-----------------+---------------------------+
| Author_idAuthor | Publication_idPublication |
+-----------------+---------------------------+
|               1 |                         1 |
|               2 |                         2 |
|               3 |                         3 |
|               4 |                         4 |
|               1 |                         5 |
|               2 |                         5 |
|               3 |                         5 |
|               3 |                         6 |
|               4 |                         7 |
|               4 |                         8 |
|               4 |                         9 |
|               4 |                        10 |
|               3 |                        11 |
|               3 |                        12 |
|               2 |                        13 |
+-----------------+---------------------------+

我想获得2010年在DPC会议上发表至少2次的所有作者名单。 我实现了获取已发布内容的autor列表以及每个发布的数量,但我无法获得“至少2”因素。

我的以下查询

SELECT author.name, COUNT(name) FROM author INNER JOIN author_has_publication ON author.idAuthor=author_has_publication.Author_idAuthor INNER JOIN publication ON author_has_publication.Publication_idPublication=publication.idPublication AND publication.date=2010 AND publication.conference='DPC'GROUP BY author.name;

返回以下结果(这很好)

+-------+-------------+
| name  | COUNT(name) |
+-------+-------------+
| Bob   |           2 |
| Bryan |           3 |
| John  |           1 |
+-------+-------------+

但是当我尝试只选择一个带有计数(名称)> = 2的那个时,我收到了一个错误。 我试过这个问题:

SELECT author.name, COUNT(name) FROM author INNER JOIN author_has_publication ON author.idAuthor=author_has_publication.Author_idAuthor INNER JOIN publication ON author_has_publication.Publication_idPublication=publication.idPublication AND publication.date=2010 AND publication.conference='DPC'GROUP BY author.name WHERE COUNT(name)>=2;

1 个答案:

答案 0 :(得分:1)

使用聚合函数时,可以使用名为HAVING

的适当运算符进行过滤

查询查询结果(然后pn像count()这样的聚合结果)而不是那些对表行的原始值起作用的地方

SELECT author.name, COUNT(name) 
FROM author INNER JOIN author_has_publication 
        ON author.idAuthor=author_has_publication.Author_idAuthor 
INNER JOIN publication 
       ON author_has_publication.Publication_idPublication=publication.idPublication 
AND publication.date=2010 AND publication.conference='DPC'
GROUP BY author.name 
HAVING COUNT(name)>=2;