sql查询计数连接中的记录数

时间:2017-06-16 13:58:12

标签: mysql sql subquery

我必须根据位置名称从pos表中提取POS(服务点)列表:

POS
+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| id       | int(11)      | NO   | PRI | NULL    | auto_increment |
| name     | varchar(100) | NO   |     | NULL    |                |
| address  | varchar(200) | YES  |     | NULL    |                |
| country  | varchar(45)  | YES  |     | NULL    |                |
| location | varchar(100) | YES  |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+

所以,它会是这样的:

select *
from pos
where location = 'new york';

现在,从表任务中我必须计算POS(pos_name)的数量,如果这个数字大于来自子查询的数字,则不应显示pos寄存器。

任务

| id                      | int(11)       | NO   | PRI | NULL              | auto_increment              |
| team_name               | varchar(45)   | YES  |     | NULL              |                             |
| team_photo              | varchar(255)  | YES  |     | NULL              |                             |
| pos_name                | varchar(45)   | YES  |     | NULL              |                             |
| pos_id                  | int(11)       | YES  |     | NULL              |                             |
| product_category        | varchar(45)   | YES  |     | NULL              |                             |
| product_platform        | varchar(45)   | YES  |     | NULL              |                             |
| created_by              | int(11)       | YES  |     | NULL              |                             |
| judged_by               | int(11)       | YES  |     | NULL              |                             |
| selfie_photo            | varchar(255)  | YES  |     | NULL              |                             |
| like_score              | int(11)       | YES  |     | NULL              |                             |
| star_score              | float         | YES  |     | NULL              |                             |
| feedback_recommendation | varchar(2000) | YES  |     | NULL              |                             |
| created_at              | timestamp     | YES  |     | CURRENT_TIMESTAMP |                             |
| updated_at              | timestamp     | YES  |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| sent_date               | timestamp     | YES  |     | NULL              |                             |
| locked                  | tinyint(1)    | YES  |     | 0                 |                             |
+-------------------------+---------------+------+-----+-------------------+-----------------------------+

所以直到现在我开发了以下sql查询:

SELECT p.id,p.name 
FROM missions m join pos p
on m.pos_id = p.id
where p.location = 'new york'
having count(m.pos_name) < (select count(*)
                          from product_category);

但这部分代码

having count(m.pos_name)

应该是这样的:

select count(*) 
from missions 
group by pos_name;

因为没有group by语句我会收到所有pos的总和,但我需要检查一个组,而不是所有这些。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我想你需要带有条件的数据,然后试试这个

SELECT p.id,p.name 
FROM missions m join pos p
on m.pos_id = p.id
where p.location = 'new york'
group by m.pos_name
having count(m.pos_name) < (select count(*)
                      from product_category);

只需添加group by m.pos_name即可。 您可以查看Here