当前位置: 代码迷 >> Oracle管理 >> 请问个简单group by有关问题
  详细解决方案

请问个简单group by有关问题

热度:54   发布时间:2016-04-24 04:13:49.0
请教个简单group by问题
找出公司内谁的工资最低,显示姓名和最低工资? 
 1.   select first_name,min(salary)
       from s_emp
       group by first_name;

2.    select min(salary),first_name
        from s_emp
       group by first_name;

3.  select salary,first_name
       from s_emp
       where salary = (select min(salary)
         from s_emp);
                    
为什么3是对的 1 2错在什么地方 请教详细回答谢谢了
------解决思路----------------------
1和2不就是同一个语句吗,查询列位置不同而已
group by first_name,按名字分组,则查询的是每个名字下的最低工资
3的select min(salary) from s_emp 没有分组,取的是所有人里的最低工资,where salary=... 即找出工资为该最低工资的所有人

其实这种问题做个试验就知道了
------解决思路----------------------
 找个环境执行一下,看看结果,再想想语法,很容易明白的
------解决思路----------------------
第一、2个是一样的,而且语义是:找出每个人的最低工资,如果一个人一直只有一个工资记录(也就是没有调薪),那你的语句没什么意义。第3个是先找出整个公司里面的全部人里面的最低工资的那个,然后再找出这个人是谁,所以满足你要求
------解决思路----------------------
楼主你1,2两个是分组求最小,意思就是找出每个人的最低工资。
而第3个则是在公司中找到最低工资来筛选员工。
------解决思路----------------------
首先:1和2句子是一样的,顺序不一样不影响结果,这两句都是求每个人的最低工资,因为是group by first_name 所以是根据人分组
第二:第3个句子才是求出工资是所有人中最低的那个人,因为select min(salary) from s_emp这个子查询是找出的全部人中的最低工资。
------解决思路----------------------
分析语句从字面开始分析就好:
1.2按照员工进行分组,得到的就是某个员工的最低工资,3里面没有分组,所以就是所有的人的最低工资。
------解决思路----------------------
这个只要试试就明白了
------解决思路----------------------
楼主没有理解分组的含义
------解决思路----------------------
第1,2两个一样是找出每个人的最低工资,第3个是找出最低工资的那个人与他的工资
------解决思路----------------------
第1,2 显示的是每个人的姓名,同时还有公司的最低公司, 有多少人,就有多少条记录
------解决思路----------------------
1和2:姓名相同,且工资最低的员工信息;
3才是公司内谁的工资最低,显示姓名和最低工资

------解决思路----------------------
1,2 的结果,是每个人都出来一行。

3的结果,是把工资最低的人都列出来,也可能是最低的人有 2个3个4个。
  相关解决方案