簡體   English   中英

我需要計算每個員工每月的平均產量

[英]I need to calculate the average production per employee per month

我需要創建一個報告,顯示平均每天至少生產30件的員工

我有2張桌子:

Employees: id, name, surname
Production: id, date_time, id_employee, [..], quantity_produced

員工表中的id =生產表中的id_employee


SELECT name, surname, Avg(quantity_produced), Month(data_ora) Mnth
FROM production inner join employees on employees.id = production.id_employee
GROUP BY name, quantity_produced, Month(date_time);

要么

select name, surname, quantity_produced, avg(quantity_produced) as avgentrypermonth 
    from (
select month(date_time) as month ,count(1) as quantity
     group by month(date_time));

要么

select name, surname, quantity_produced
    from production 
     inner join employees on employees.id = production.id_employee
    where avg(quantity_produced) > 30;

我最有可能在以下查詢中取消一項。

但是,如果沒有示例數據和預期結果,很難提出可靠的建議。

查詢:

SELECT 
    Production.id_employee,
    AVG(Production.quantity_produced)
FROM 
    Production
WHERE
    Production.date_time BETWEEN
                         (LAST_DAY(NOW()) + INTERVAL 1 DAY) - INTERVAL 1 MONTH # first day of current month
                         AND
                         LAST_DAY(NOW()) # last day of current month
GROUP BY 
    Production.id_employee

查詢何時需要員工記錄:

SELECT 
    Employees.name,
    Employees.surname,
    AVG(Production.quantity_produced)
FROM 
    Production
INNER JOIN 
    Employees ON Production.id_employee = Employees.id
WHERE
    Production.date_time BETWEEN
                         (LAST_DAY(NOW()) + INTERVAL 1 DAY) - INTERVAL 1 MONTH  # first day of current month
                         AND
                         LAST_DAY(NOW()) # last day of current month
GROUP BY 
    Employees.id

請注意,以上查詢至少假設了MySQL 5.7.5+和SQL 1999+標准的可選功能,即功能依賴

手冊

或作為相關子查詢:正確建立索引后應該可以

SELECT 
    (SELECT Employees.name FROM Employees.id = Production.id_employee) AS name,
    (SELECT Employees.surname FROM Employees.id = Production.id_employee) AS surname,
    AVG(Production.quantity_produced)
FROM 
    Production
WHERE
    Production.date_time BETWEEN
                         (LAST_DAY(NOW()) + INTERVAL 1 DAY) - INTERVAL 1 MONTH # first day of current month
                         AND LAST_DAY(NOW()) # last day of current month
GROUP BY 
    Production.id_employee

對於過濾器聚合結果,您需要具有子句

SELECT name, surname, Avg(quantity_produced), Month(date_time) Mnth
FROM production 
inner join employees on employees.id = production.id_employee
GROUP BY name, surname, Month(date_time)
having Avg(quantity_produced) > 30 ;

以及年份

SELECT name, surname, Avg(quantity_produced), Month(date_time) Mnth, year(date_time) year
FROM production 
inner join employees on employees.id = production.id_employee
GROUP BY name, surname, Month(date_time), year(date_time) year
having Avg(quantity_produced) > 30 ;

在使用幾個月時,您應該確保也考慮到了這一年:

SELECT year(p.data_ora) as yyyy, month(p.data_ora) as mm,
       e.name, e.surname, avg(p.quantity_produced),
FROM production p inner join
     employees e
     on e.id = p.id_employee
GROUP BY year(p.data_ora), month(p.data_ora,
         e.name, e.surname
HAVING avg(p.quantity_produced) >= 30
ORDER BY year(p.data_ora), month(p.data_ora),
         e.name, e.surname;

假設production具有員工每天工作的產量。

筆記:

  • 當表引用多個表時,請限定所有列引用。
  • 使用表別名,以便查詢更易於編寫和閱讀。
  • 記住那一年! (當您工作數月時)
    I think this should work , can you please try it once. And may be little modification required, Comment here I will try to do the fixes.
  1.Select
         E.id "Employee ID",
         E.name "Employee Name",
         Month(P.date_time) "Month",
         AVG(P.quantity_produced) "Quantity Produced"
    From Employee as E
         Join Production as P on E.id=P. id_employee
    Group by
         E.id,E.name,Month(P.date_time)
    Having Avg(P.quantity_produced) > 30

2.Select
         E.name "Employee Name",
         Month(P.date_time) "Month",
         AVG(P.quantity_produced) "Quantity Produced"
    From Employee as E
         Join Production as P on E.id=P. id_employee
    Group by
         E.name,Month(P.date_time)
    Having Avg(P.quantity_produced) > 30

暫無
暫無

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

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