两个思路:从选项推答案(使用选择题);如果是问答题如何分析。

1、从选项推答案

1.1 选项中非标准语句问题

① GROUP BY后SELECT列有非聚合列:标准SQL - SELECT 聚合列,聚合函数(任意列)FROM 表 GROUP BY;在mysql中sql_mode配置为ONLY_FULL_GROUP_BY(严格模式)时会检查GROUP BY的合法性,如果没有配置,MySQL允许target list中输出的表达式是除聚集函数或group by column以外的列或表达式。

② GROUP BY后有DESC关键字:标准SQL - DESC/ASC一定跟在ORDER BY后;在mysql8.0之前GROUP BY支持隐示排序(默认生成表会自动排序)和显示排序(GROUP BY后跟DESC/ASC), mysql8.0不再支持,原因大概是之前版本有个问题(不允许使用ORDER BY进行ROLLUP)所以用隐示排序作为替代后来当缺陷解决了就删除了隐示排序和显示排序【这问题是当BUG解决的,程序员埋坑挖土造新坑,永无止境也~】,详细见https://mysqlserverteam.com/removal-of-implicit-and-explicit-sorting-for-group-by/。

③ sum(download_count) download_sum 别名没用AS:AS是别名关键字,增加了可读性;如果没有AS效果是一样的只是不太好看

1.2 分析选项推答案

① 聚合:从选项中可以看出执行第一步都是SELECT GROUP BY;所以这里对于快速分析并没有太大帮助,可以直接分析下一步了。

SELECT GROUP BY拆解过程如下:

- group by中间(逻辑)表。聚合过程好比excel中合并单元格(聚合列同值行合并),又这里默认会隐示排序,看起来好像是建了个索引。

- SELECT生成表

② GROUP or JOIN or SELECT:从选项中看出第二步执行可能性分别是,GROUP、JOIN 、SELECT;这时候要分析这3个操作分别用于什么情况。

- SELECT...GROUP,按列值分成若干逻辑表并可以在同组表内查询筛选若干结果

- SELECT...WHERE,在整张表内查询筛选结果,

- SELECT...JOIN,联结分外联结和自联结;外联结是为了向其他表查询本表没有的数据信息,这里显然不需要;自联结一般是不同列有关联关系,同一列为关联关系的意义不大,这里也不符合;如果真的同一列连接(如下表),其中(t2.download_sum仅仅是t1.download_count多行的累加,并没有得到额外信息;反而是冗余扩张)

综上并结合题干,期望需与app_id列聚合的结果,GROUP就是是最好的选择;至于出现DESC,选择最大值提高查询速度吧。

2、如何解决此类问答题?(按照选项套的思路,分析下来这个选项除了有部分非标准SQL语句,所以以下从题干总结思路)

s1、每个应用(版本号对应总下载量)最大值 -> 筛选出最大值的列是(版本号对应总下载量),(版本号对应总下载量)这个列从原表中无法直接得出,故需要一个子查询;假设子查询已成功,有列1 -> 问题转换为,每个应用(app_id)中列1最大值 -> 查询结果app_id含原表所有值且唯一,用GROUP BY;列1的最大值且跟着GROUP BY,必选聚合函数MAX;

总查询:SELECT a.app_id,a.MAX(列1) FROM(子查询)AS a GROUP BY app_id;

s2、版本号对应总下载量 -> 引申为每个版本(version_code)对应总下载量 -> 查询结果version_code含原表所有值且唯一,用GROUP BY;总下载量即为下载量(download_count)列值的总合,用SUM;又因为(版本号对应总下载量)是子查询,需要向主查询传递app_id且app_id是聚合version_code的前提条件,所以聚合列是(app_id,version_code)

子查询:SELECT app_id, version_code, SUM(download_count) FROM 原表 GROUP BYapp_id,version_code;

SELECT a.app_id, a.version, MAX(a.download_sum) FROM (SELECT app_id, version, SUM(download) AS download_sum FROM app GROUP BY app_id, version) AS a GROUP BY app_id;

以上有主观成分(如错误欢迎讨论)

有如下MySQL表_有一个名为app的MySQL数据库表,其建表语句如下: CR相关推荐

  1. Python导出MySQL数据库中表的建表语句到文件

    为了做数据对象的版本控制,需要将MySQL数据库中的表结构导出成文件进行版本化管理,试写了一下,可以完整导出数据库中的表结构信息 # -*- coding: utf-8 -*- import os i ...

  2. postgres 命令行建数据库表_Postgresql 查看建表语句 命令

    Mysql查看建表语句以及修改引擎 更多内容推荐微信公众号,欢迎关注: 1 查看系统支持的存储引擎 show engines; 2 查看表使用的存储引擎 两种方法: a.show table stat ...

  3. Mybatis-Plus一个新的报错:数据库表名与SQL的关键字冲突!!!

    Mybatis-Plus一个新的报错:数据库表名与SQL的关键字冲突!!! 老规矩先上报错信息: 2021-08-27 19:18:19.510 ERROR 33476 --- [nio-9000-e ...

  4. PowerDesigner,如何将Mysql数据库建表语句转化成Oracle数据库建表语句。

    在实际工作中,一张表,我们可能需要在Mysql数据库中建表,又要在Oracle数据库中建表.表中每个字段的数据类型.中文注释.是否可为NULL 问题,非常影响我们建表的效率.本篇文章,以Mysql数据 ...

  5. 完整版使用Shell脚本在多个服务器同时实现Mysql建表语句和删除表

    文章目录 一.创建表结构 二.删除表结构 前言:我们在项目开发过程中可能会遇到类似这样的需求,比如在多个Mysql服务器同时建表语句和删除表,这时候我们肯定不可能一个服务器一个服务器的创建,所以我们要 ...

  6. mysql运维高级_Mysql DBA 高级运维学习之路-mysql建表语句及表知识

    1.创建表 1.1 建表的基本命令语法 create table( , --- ) 1.2 创建student表 (1)在linzhongniao库中创建student表 mysql> use ...

  7. mysql 创建表 引号_Mysql建表语句中显示双引号的方法介绍

    原标题:Mysql建表语句中显示双引号的方法介绍 在工作中使用Mysql数据库,发现建表后的ddl显示表名.字段都是双引号.这样的ddl在线上工单系统无法通过,需要将双引号转成反引号(`)才行. 通过 ...

  8. PowerDesigner,如何将Oracle数据库建表语句转化成Mysql数据库建表语句。

    在实际工作中,一张表,我们可能需要在Mysql数据库中建表,又要在Oracle数据库中建表.表中每个字段的数据类型.中文注释.是否可为NULL 问题,非常影响我们建表的效率.本篇文章,以Oracle数 ...

  9. mysql分片建表语句_Mysql元数据如何生成Hive建表语句注释脚本详解

    前言 本文主要给大家介绍了关于Mysql元数据生成Hive建表语句注释脚本的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 最近在将数据从Mysql 等其他关系型数据库 抽取 ...

最新文章

  1. Effective C++:条款33:避免遮掩继承而来的名称
  2. python基础教程: __del__() 清空对象
  3. html用jq设置动态效果,jQuery实现基本动画效果的方法详解
  4. Maven_在Eclipse中执行Maven命令
  5. 隐藏apache版本号的方法
  6. html缩进快捷键_Windows IDEA 快捷键终极大全,果断收藏!
  7. 请问这样写法,第二个container的内容怎么没有显示的呢?但是加上jumbotron就可以显示了,不明白。...
  8. ThingsBoard 提示 New ThingsBoard version xx is availabled!
  9. 麦子学院python百度云_麦子学院python
  10. 架构一个可承受千万级访问量的动态扩展CMS
  11. 起始方位角怎么确定_工程测量中的导线测量,最初的方位角怎么求?
  12. linux命令 sys,用syslinux引导多个linux系统
  13. 用Matlab实现人脸 68 landmarks详细教程
  14. python报错NameError: name 'NA' is not defined
  15. word常见问题_2 添加不同的页码
  16. MIR 2022 反者道之动, 基于因果推断的可解释对抗防御
  17. 用cat查看非常大非常大的文件是什么体验
  18. 【转】日常电脑操作应该注意的十几个小动作以及维
  19. 基于Webio交互的Pyecharts数据分析脚本小记
  20. Java实现简单的文件复制功能

热门文章

  1. 华为AppCube入选Forrester《中国低代码平台市场分析报告》
  2. 解析对偶理论与对偶单纯性法
  3. 华为云登顶HotpotQA多跳知识推理问答评测
  4. MindSpore手写数字识别初体验,深度学习也没那么神秘嘛
  5. C++调用Go方法的字符串传递问题及解决方案
  6. 【华为云技术分享】上亿条数据,如何查询分析简单又高效?
  7. 90%代码如何实现自动迁移到鲲鹏平台?
  8. 八分音符(频率)卷积算子 Octave Convolution
  9. #华为云·寻找黑马程序员#微服务-你真的懂 Yaml 吗?
  10. 设计模式笔记九:组合模式