mySQL的group|mySQL的group by用法深入探讨
先上网上目前的结论:【mySQL的group|mySQL的group by用法深入探讨】但是,其实这个结论是不完整的。
- 必須出現在where之後,order by之前
- select中的列名必須是分組列或者列函數
先看表:
- Student table
文章图片
- Apply table
文章图片
select sname, count(distinct uName)
from Apply join Student using (sid)
group by (sid)
;
其实,其中sname换成sid, score, sssize都是对的
按理说按照最开始的结论,应该只有sid对才对的
而以下的是错误的:
select uName, count(distinct uName)
from Apply join Student using (sid)
group by (sid)
;
其实,uName换成degree、decision都是错的。
原因是: 结论还要加上:select中的列名不是分组列且不写在聚合函数里也是可以的,但是前提是该列名和分组列应该是一一对应关系
原理是: 首先要明确group by的每一个组在之后生成的查询结果表中肯定都是只占一行的。
所以先解释一下为什么聚合函数出现在select中肯定是没问题的:因为聚合函数生成的只有一个值,在生成表中只占用一格。
然后解释为什么上面的sname以及score以及sssize都可以,因为他们三个属性都和sid是一一对应关系(在Student表里面sid是主键,决定他们仨),所以他们仨在生成表里面也都只占用一格。
最后解释为什么degree那些要报错,因为他们在join之后的表里面和sid不是一一对应关系,因此在生成表里面就会占用多格,这就不符合atomic的标准了。
源于和舍友的讨论 <杨~叶>
推荐阅读
- 热闹中的孤独
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 一个人的旅行,三亚
- 布丽吉特,人生绝对的赢家
- 慢慢的美丽
- 尽力
- 一个小故事,我的思考。
- 家乡的那条小河
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量