如何使用计数函数从不同的 table 中减去 2 列?
How to substract 2 columns from different table with using count function?
目前,我正在使用计数函数计算 2 列的值,并想减去 2 列并导出到 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";
我认为您需要两个 LEFT JOIN
聚合查询:
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
目前,我正在使用计数函数计算 2 列的值,并想减去 2 列并导出到 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";
我认为您需要两个 LEFT JOIN
聚合查询:
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