1

2 つのテーブルがあり、すべてのドライバーが運ぶ荷物の平均数を超えて配送したドライバーと、平均をどれだけ上回っているドライバーを見つける必要があります。表示している最初のテーブルはパッケージ テーブルで、2 番目はトラック テーブルです。カウントを使用する必要があることはわかっていますが、それを平均と組み合わせる方法がわかりません

Truck_no
103 
105 
102 
108 
108 
108 
101 
109 
109 
100 
100 
100 


Truck_no Drivername
100 JONES
101 DAVIS
102 GOMEZ
103 THOMPSON
104 HERSHEY
105 FERRIS
106 SHAVER
107 LEE
108 TOPI
109 ACKERMAN

これはこれまでの私のクエリです

select drivername, count(package.truck_no) as PackageCount
from PACKAGE, truck
where truck.TRUCK_NO=PACKAGE.TRUCK_NO
group by drivername

そして私はこれらの結果を得る

Drivername      Packagecount
ACKERMAN    2
DAVIS           1
FERRIS          1
GOMEZ           1
JONES           3
THOMPSON    1
TOPI            3

助けていただければ幸いです。どうもありがとう

4

1 に答える 1

1
    SELECT drivername, packagecount
      FROM (   SELECT drivername, COUNT(1) AS packagecount
                 FROM truck
            LEFT JOIN package
                      ON truck.truck_no = package.truck_no
             GROUP BY 1) all_driver_counts
CROSS JOIN
           (SELECT AVG(n) AS avg_packagecount
              FROM (  SELECT truck_no, COUNT(1) AS n
                        FROM package
                    GROUP BY 1) truck_packages) the_average
     WHERE packagecount > avg_packagecount;

これにより、次が生成されます。

+------------+--------------+
| drivername | packagecount |
+------------+--------------+
| ACKERMAN   |            2 |
| JONES      |            3 |
| TOPI       |            3 |
+------------+--------------+

上記のクエリをボトムアップで読み、トラックごとに配送された平均パッケージ ( ) を計算し、the_averageそれを各ドライバーの数 ( ) と結合してall_driver_counts、ドライバーの数が平均を超える行のみをフィルタリングします。

分析 (SQL スライディング ウィンドウ) 関数により、上記のクエリがより簡単になった可能性がありますが、残念ながら、MySQL はそれらをサポートしていません。

于 2013-10-22T03:46:58.020 に答える