sql查询计数连接中的记录数
Posted
技术标签:
【中文标题】sql查询计数连接中的记录数【英文标题】:sql query count number of record in a join 【发布时间】:2017-06-16 13:58:11 【问题描述】:我必须根据位置名称从 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 的总和,但我需要检查一个组,而不是所有组。
有什么建议吗?
【问题讨论】:
你试过having count(distinct m.pos_name)
吗?
【参考方案1】:
我觉得你需要带有条件的分组数据,然后试试这个
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
【讨论】:
以上是关于sql查询计数连接中的记录数的主要内容,如果未能解决你的问题,请参考以下文章