我有一个emp具有以下结构和数据的表:
name dept salary
----- ----- -----
Jack a 2
Jill a 1
Tom b 2
Fred b 1
当我执行以下SQL:
SELECT * FROM emp GROUP BY dept
我得到以下结果:
name dept salary
----- ----- -----
Jill a 1
Fred b 1
服务器是基于什么决定决定返回吉尔和弗雷德,并排除杰克和汤姆?
我在MySQL中运行此查询。
注意1:我知道查询本身没有任何意义。我正在尝试调试“ GROUP BY”方案的问题。我试图了解用于此目的的默认行为。
注2:我习惯于编写与GROUP BY子句相同的SELECT子句(减去聚合字段)。当我遇到上述行为时,我开始怀疑我是否可以在以下情况下依赖此行为:从emp表中选择薪水在部门中最低/最高的行。例如:这样的SQL语句可在MySQL上运行:
SELECT A.*, MIN(A.salary) AS min_salary FROM emp AS A GROUP BY A.dept
我找不到任何描述这种SQL为何起作用的材料,更重要的是,如果我能够始终如一地依靠这种行为的话。如果这是可靠的行为,那么我可以避免类似以下的查询:
SELECT A.* FROM emp AS A WHERE A.salary = (
SELECT MAX(B.salary) FROM emp B WHERE B.dept = A.dept)
慕标5832272
至尊宝的传说
慕容708150
相关分类