簡體   English   中英

統計SQL中多個表的過濾數據

[英]Count the filtered data from multiple tables in SQL

我有 2 個表 config_location_workstation 和asset_workstation,它們都有列 floor 和workstation_number。

我想要一個查詢返回如下內容:

地板| SUM 生產工作站 | 總人數

下面的代碼來自另一個來源,我能夠提取總和但數字不正確,因為我想要得到的是所有生產工作站的數量。

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

問題是 WHERE 不適用於此代碼。 工作站列總和無效。 它正在拉起所有條目。 我只需要查詢所有 PRODUCTION 工作站

這是當前的 output。

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

所有生產工作站的預期 output

+-------+-------------+------+------+
| Floor | Head Count  | Workstations|
+-------+-------------+------+------+
| 18TH  | 696         | 497         |
| 19TH  | 381         | 388         |
| 20TH  | 380         | 659         |
+-------+-------------+------+------+

可能您可以嘗試使用子查詢

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'

更新:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM