【问题标题】:select values greater than the average选择大于平均值的值
【发布时间】:2013-10-30 17:05:39
【问题描述】:

我有两张表,我需要找到交付的包裹数量超过所有司机平均运送数量的司机,以及比平均水平多的司机。我显示的第一个表是 Package 表,第二个是 Truck 表。我知道我需要使用计数,但我不知道如何将其与平均值结合起来

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

我非常感谢任何帮助。非常感谢

【问题讨论】:

  • 当您使用sumcount 等时,MySQL 会进行意外分组,所以在这种情况下,我会说您应该运行两个查询,第一个将计算平均值,第二个 ( main) 将选择where Packagecount > {insert average} - 你可以使用服务器端语言(PHP、ASP 等)
  • 谢谢。我考虑过使用子查询,但我不能取平均的 truck_no
  • 您能清楚地发布您的输入和预期输出吗...
  • 我只需要找出卡车运送的包裹的平均数量(出现在第一个表中),然后指定哪些司机的运送量超过了平均数量以及他们的运送量。我应该得到 3 行

标签: mysql sql join count sum


【解决方案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 不支持它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-23
    • 1970-01-01
    • 2016-09-04
    • 2022-01-18
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 2021-07-08
    相关资源
    最近更新 更多