Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
同一表上的MySQL计数子查询_Mysql_Sql_Database - Fatal编程技术网

同一表上的MySQL计数子查询

同一表上的MySQL计数子查询,mysql,sql,database,Mysql,Sql,Database,我有一个疑问: SELECT `facilities`.`name` AS facility, `countries`.`name` AS country, `states`.`name` AS state, `users`.`dosage` AS dosage, COUNT(`users`.`id`) AS registrations FROM `users` LEFT JOIN `countries` ON `users`.`country_id` = `countries`.`id`

我有一个疑问:

SELECT `facilities`.`name` AS facility, `countries`.`name` AS country, `states`.`name` AS state, `users`.`dosage` AS dosage, COUNT(`users`.`id`) AS registrations 
FROM `users` 
LEFT JOIN `countries` ON `users`.`country_id` = `countries`.`id` 
LEFT JOIN `states` ON `users`.`state_id` = `states`.`id` LEFT JOIN `user_facilities` ON `users`.`id` = `user_facilities`.`user_id` 
LEFT JOIN `facilities` ON `user_facilities`.`facility_id` = `facilities`.`id` 
WHERE `users`.`dosage` != "Not sure" 
GROUP BY `facilities`.`name`, `countries`.`name`, `states`.`name`, `users`.`dosage` 
ORDER BY `facilities`.`id` ASC, `countries`.`id` ASC, `states`.`name` ASC
它给了我这个结果:

Hospital  | United States | Arkansas | 10 doses  | 3    
Hospital  | United States | Arkansas | >10 doses | 4    
Home care | United States | Arkansas | 10 doses  | 1    
Home care | United States | Texas    | 10 doses  | 1
我的用户表: id |电子邮件|州id |国家id |剂量|完成百分比|

我需要做的是为每个结果获取完成百分比=100的用户数。我尝试了子查询,但找不到适合此项的子查询。我卡住了。有人有什么建议吗?
谢谢。

如果我理解正确,您可以使用条件聚合。在MySQL中,您只需执行以下操作:

select . . .,
       sum(percent_completed = 100) as num_at_100

如果我理解正确,您可以使用条件聚合。在MySQL中,您只需执行以下操作:

select . . .,
       sum(percent_completed = 100) as num_at_100

在分组后,请添加“已完成总数(完成百分比)>=100”,这将使您的用户计数已完成>=100%的用户

SELECT `facilities`.`name` AS facility, `countries`.`name` AS country, `states`.`name` AS state, `users`.`dosage` AS dosage, COUNT(`users`.`id`) AS registrations 
FROM `users` 
LEFT JOIN `countries` ON `users`.`country_id` = `countries`.`id` 
LEFT JOIN `states` ON `users`.`state_id` = `states`.`id` LEFT JOIN `user_facilities` ON `users`.`id` = `user_facilities`.`user_id` 
LEFT JOIN `facilities` ON `user_facilities`.`facility_id` = `facilities`.`id` 
WHERE `users`.`dosage` != "Not sure" 
GROUP BY `facilities`.`name`, `countries`.`name`, `states`.`name`, `users`.`dosage` having sum(users.percentage_completed) >= 100
ORDER BY `facilities`.`id` ASC, `countries`.`id` ASC, `states`.`name` ASC

在分组后,请添加“已完成总数(完成百分比)>=100”,这将使您的用户计数已完成>=100%的用户

SELECT `facilities`.`name` AS facility, `countries`.`name` AS country, `states`.`name` AS state, `users`.`dosage` AS dosage, COUNT(`users`.`id`) AS registrations 
FROM `users` 
LEFT JOIN `countries` ON `users`.`country_id` = `countries`.`id` 
LEFT JOIN `states` ON `users`.`state_id` = `states`.`id` LEFT JOIN `user_facilities` ON `users`.`id` = `user_facilities`.`user_id` 
LEFT JOIN `facilities` ON `user_facilities`.`facility_id` = `facilities`.`id` 
WHERE `users`.`dosage` != "Not sure" 
GROUP BY `facilities`.`name`, `countries`.`name`, `states`.`name`, `users`.`dosage` having sum(users.percentage_completed) >= 100
ORDER BY `facilities`.`id` ASC, `countries`.`id` ASC, `states`.`name` ASC

你能给我们结构和一些样本数据作为sql语句吗?你能给我们结构和一些样本数据作为sql语句吗?非常感谢,这正是我需要的:)非常感谢,这正是我需要的:)谢谢你的回答。“Having”删除完成百分比为0的数据。条件聚合解决了我的问题:)谢谢你的回答。“Having”删除完成百分比为0的数据。条件聚合解决了我的问题:)