sql >> データベース >  >> RDS >> Mysql

MySQL-グループからの最大値をフィルタリングして表示する方法は?

    考えられる解決策の1つは、HAVINGを使用することです。 およびALL

    SELECT s.shopname AS "Store",
       e.empname AS "Employee",
       e1.empname AS "Manager",
       SUM(p.amount) AS "Total Sales"
    FROM fss_Shop s
       JOIN fss_Employee e ON e.shopid = s.shopid
       JOIN fss_Payment p ON p.empnin = e.empnin
       JOIN fss_Employee e1 ON e1.empnin = e.mgrnin
    GROUP BY e.empname, s.shopid
    HAVING SUM(p.amount) >= ALL(
       SELECT SUM(p.amount)
       FROM fss_Employee e
       JOIN fss_Payment p ON p.empnin = e.empnin
       WHERE e.shopid = s.shopid
       GROUP BY e.empname
    )
    

    ALLの場合 あなたのために動作しません。このように変更できます

    SELECT s.shopname AS "Store",
       e.empname AS "Employee",
       e1.empname AS "Manager",
       SUM(p.amount) AS "Total Sales"
    FROM fss_Shop s
       JOIN fss_Employee e ON e.shopid = s.shopid
       JOIN fss_Payment p ON p.empnin = e.empnin
       JOIN fss_Employee e1 ON e1.empnin = e.mgrnin
    GROUP BY e.empname, e.shopid
    HAVING SUM(p.amount) = (
       SELECT MAX(t.samount)
       FROM
       (
         SELECT SUM(p.amount) samount
         FROM fss_Employee emp
         JOIN fss_Payment p ON p.empnin = emp.empnin
         WHERE emp.shopid = e.shopid
         GROUP BY emp.empname
       ) t
    )
    

    okとFROMの背後にある相関サブクエリを回避する次のバージョン

    SELECT s.shopname AS "Store",
       e.empname AS "Employee",
       e1.empname AS "Manager",
       SUM(p.amount) AS "Total Sales"
    FROM fss_Shop s
       JOIN fss_Employee e ON e.shopid = s.shopid
       JOIN fss_Payment p ON p.empnin = e.empnin
       JOIN fss_Employee e1 ON e1.empnin = e.mgrnin
    GROUP BY e.empnin, e.shopid
    HAVING (e.shopid, SUM(p.amount)) IN
    (
      SELECT t.shopid, MAX(t.samount)
      FROM 
      (
         SELECT emp.shopid, SUM(p.amount) samount
         FROM fss_Employee emp
         JOIN fss_Payment p ON p.empnin = emp.empnin
         GROUP BY emp.empname, emp.shopid
      ) t
      GROUP BY t.shopid
    ) 
    



    1. ASP.NETアプリケーションのログフレームワーク

    2. SELECT*FROMリンクされたMySQLサーバー

    3. Access2016でテーブルをバックエンドデータベースにリンクする方法

    4. 特定のフィールドに通貨記号£、$を追加します。ORACLE