Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.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 如何使用count函数从不同的表中减去2列?_Mysql_Sql_Count_Subquery_Left Join - Fatal编程技术网

Mysql 如何使用count函数从不同的表中减去2列?

Mysql 如何使用count函数从不同的表中减去2列?,mysql,sql,count,subquery,left-join,Mysql,Sql,Count,Subquery,Left Join,目前,我正在使用count函数计算两列的值,并希望减去这两列并导出到excel文件 这是我的密码。我认为粗体陈述包含逻辑错误 SELECT software.*, (SELECT count(lkey.k_id) FROM lkey WHERE lkey.s_id = software.s_id) AS Total, (SELECT count(assign.k_id) FROM assign WHERE assign.s_id = software.s_id) AS Installed,

目前,我正在使用count函数计算两列的值,并希望减去这两列并导出到excel文件

这是我的密码。我认为粗体陈述包含逻辑错误

SELECT software.*, 
(SELECT count(lkey.k_id) FROM lkey WHERE lkey.s_id = software.s_id) AS Total, 
(SELECT count(assign.k_id) FROM assign WHERE assign.s_id = software.s_id) AS Installed, 

**(SELECT count(lkey.k_id) - count(assign.k_id) FROM lkey INNER JOIN assign 
WHERE lkey.k_id = assign.k_id GROUP BY lkey.k_id) AS Available**
FROM software"; 

我想在聚合查询中需要两个
左连接
s:

SELECT s.*, 
    COALESCE(l.total,     0) total, 
    COALESCE(a.installed, 0) installed, 
    COALESCE(l.total, 0) - COALESCE(a.installed, 0) available
FROM software s
LEFT JOIN (SELECT s_id, count(*) total     FROM lkey   GROUP BY s_id) l 
    ON l.s_id = s.s_id
LEFT JOIN (SELECT s_id, count(*) installed FROM assign GROUP BY s_id) a 
    ON a.s_id = s.s_id
在MySQL的最新版本中,您可以使用横向连接:

SELECT s.*, l.total, a.installed, l.total - a.installed available
FROM software s
LEFT JOIN LATERAL (SELECT count(*) total     FROM lkey l   WHERE l.s_id = s.s_id) l ON 1
LEFT JOIN LATERAL (SELECT count(*) installed FROM assign a WHERE a.s_id = s.s_id) a ON 1

非常感谢。我已经解决了这个问题。