Tsui丶 2017-12-05 03:40 采纳率: 75%
浏览 1315
已采纳

emmmmmmm..... sql表关联本身做查询

单表sql查询 查询表中所有工资大于本部门平均工资的员工姓名

如下sql是正确的,所以不用改sql啦 只是我不明白这个为什么可以做到 (实现原理)

 SELECT
    a.name,
    a.money,
    a. NO
FROM
    part a
WHERE
    a.money > (
        SELECT
            AVG (b.money)
        FROM
            part b
        WHERE
            a. NO = b. NO
    )

这条sql是查询部门工资大于本部门平均工资的sql a.no=b.no 竟然实现了分组的功能 百度找不到相关信息 有点懵

  • 写回答

18条回答 默认 最新

  • a279076265 2017-12-05 05:56
    关注

    你可能对SQL语句执行的流程不很熟悉,推荐你看一下关于这方面的书《Microsoft SQL SERVER 2008技术内幕 T-SQL查询》。
    这个语句解释一下:

    本查询语句为单表查询——FROM子句不做笛卡尔运算,WHERE子句中做了两个运算,一个where字句中做了与外部查询的关联,此处相当于做了一个group子句,然后再select子句中输出avg平均值,最后再看外部查询就很容易理解了吧。

    相当于如下语句:

    SELECT
    a.name,
    a.money,
    a. NO
    FROM
    part a
    WHERE
    a.money >(select
    c.avg_num
    from
    (SELECT
    b.no as no,
    AVG (b.money) as avg_num
    FROM
    part b
    group by b.no) c
    WHERE
    a. NO = c. NO
    )

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(17条)

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。