计算SQL中来自多个表的过滤数据

问题描述 投票:-1回答:1

我有2个表config_location_workstation和asset_workstation,它们的列和地板号都为列。

我希望查询返回类似这样的内容:

地板|汇总生产工作站|总头数

下面的代码来自另一个来源,我能够提取总和,但数字不正确,因为我想获取的是所有生产工作站的编号。

SELECT config_location_workstation1.floor,
       (SELECT COUNT(config_location_workstation2.workstation_number)
        FROM config_location_workstation AS config_location_workstation2
        WHERE config_location_workstation2.floor = config_location_workstation1.floor) AS SUM_FLOOR,
       (SELECT COUNT(asset_workstation2.workstation_number)
        FROM asset_workstation AS asset_workstation2
        WHERE asset_workstation2.floor = config_location_workstation1.floor) AS SUM_HEAD
FROM config_location_workstation AS config_location_workstation1
INNER JOIN asset_workstation AS asset_workstation1
    ON (config_location_workstation1.workstation_number = asset_workstation1.workstation_number)
WHERE config_location_workstation1.workstation_name = 'NORTH PRODUCTION'
GROUP BY config_location_workstation1.floor

问题在于,此代码无法使用。工作站列总和无效。它拉起所有条目。我只需要查询所有PRODUCTION工作站

这是当前输出。

+-------+-------------+------+------+
| Floor | Head Count  | Workstations|
+-------+-------------+------+------+
| 18TH  | 696         | 576         |
| 19TH  | 381         | 463         |
| 20TH  | 380         | 760         |
+-------+-------------+------+------+

所有生产工作站的预期输出

+-------+-------------+------+------+
| Floor | Head Count  | Workstations|
+-------+-------------+------+------+
| 18TH  | 696         | 497         |
| 19TH  | 381         | 388         |
| 20TH  | 380         | 659         |
+-------+-------------+------+------+
mysql sql join count
1个回答
2
投票

可能您可以尝试使用子查询

select * from (
SELECT config_location_workstation1.floor,config_location_workstation1.workstation_name as z,
       (SELECT COUNT(config_location_workstation2.workstation_number)
        FROM config_location_workstation AS config_location_workstation2
        WHERE config_location_workstation2.floor = config_location_workstation1.floor) AS SUM_FLOOR,
       (SELECT COUNT(asset_workstation2.workstation_number)
        FROM asset_workstation AS asset_workstation2
        WHERE asset_workstation2.floor = config_location_workstation1.floor) AS SUM_HEAD
FROM config_location_workstation AS config_location_workstation1
INNER JOIN asset_workstation AS asset_workstation1
    ON (config_location_workstation1.workstation_number = asset_workstation1.workstation_number)
GROUP BY config_location_workstation1.floor
) x
WHERE z = 'NORTH PRODUCTION'

UPDATE:

select x.*,y.* from ( SELECT *, COUNT(workstation_name) as COUNT_FLOOR 
FROM config_location_workstation WHERE workstation_name LIKE '%PRODUCTION%' GROUP BY floor)x 
join 
(SELECT *, COUNT(floor) as COUNT_USERS FROM asset_workstation GROUP BY floor) y on 
x.workstation_number = y.workstation_number
© www.soinside.com 2019 - 2024. All rights reserved.