在做去哪儿网数据分析时候被一个问题难倒了,之前通过scrapy将数据导入了MySQL,然后想分组查询MySQL数据库每个省份每个分组300条数据,但结果。。。
第一个就是相关子查询了
关联子查询会引用外部查询中的一列或多列。这种子查询之所以被称为关联子查询,是因为子查询的确与外部查询有关。当问题的答案需要依赖于外部查询中包含的每一行中的值时,通常就需要使用关联子查询。
然后得到了如下结果
- 非相关子查询是独立于外部查询的子查询,子查询总共执行一次,执行完毕后将值传递给外部查询,并且它是优先于外部查询先执行的,他执行了再执行外部。
- 相关子查询的执行依赖于外部查询的数据,外部查询执行一行,子查询就执行一次。并且是外部先查询一次,然后再执行一次内部查询!
执行过程如下
- 从外层数据中取出一条数据,传递给内层数据查询
- 内层查询操作得到相应的值
- 外查询根据内查询的相关结果或结果集得到相应的行(满足一定条件)
- 然后重复操作,直到完成任务
然后大致懂得了操作
Where -> Group By -> Having -> Order by
这条语句中,父查询传入语句到子查询中,count语句查询出当前子查询语句中查询到的行,如果父查询的所有数值(id)都比他大,那这条语句(行)处于第一位,返回结果为1。同理,进行多次查询,得到另一个条件(city)相同前提下中每个元素所处位置。事情这样就简单了,父查询select一下再加入筛选条件即可得到正确结果。 另外,这个语句还可以通过连接方式查询
最后,复习了一下基础查询方法
- 按照子查询出现的位置
- select后面 仅仅支持标量子查询
- from后面 仅仅支持表子查询
- where或having后面 标量子查询 列子查询 行子查询
- exists后面(相关子查询)