在括号中,可以在SQL语句的各个部分中使用,如SELECT、FROM、WHERE和HAVING子句。
例如;有两个名为“员工”和“工资”的表,想要到每个部门工资最高的员工的姓名。为此,可以使用子查询查每个部门的最高工资,然后将结果与“员工”和“工资”表连接以获取具有该工资的员工的姓名。
查询的结果是一个表格,显示每个部门工资最高的员工的姓名及其部门ID和工资。
交叉连接
交叉连接是一种连接操作,用于返回2个或多个表的所有可能行组合,而不需要连接条件。它在生成测试数据或需要获取多个表格所有可能组合的计算时非常有用。然而,由于交叉连接可能会产生高计算成本和庞大的结果集,因此在使用时需要谨慎考虑其影响,并确保结果集的大小符合预期。通常情况下,应优先考虑使用其他类型的连接操作,如内连接、外连接或等值连接,以更有效地获取所需的数据。
在下面的示例中,有两个名为“客户”和“订单”的表。“客户”表包含以下列:“客户ID”“客户姓名”和“城市”。“订单”表包含以下列:“订单ID”“客户ID”和“订单日期”您想要到每个客户在每个城市下单的总数。为此,您可以使用交叉连接生成一个结果集,将每个客户与每个城市组合,然后将结果与“订单”表连接以获取每种组合的订单数量。
查询使用交叉连接生成一个结果集,该结果集将每个客户与每个城市组合在一起。交叉连接首先执行,返回一个包含每个客户和城市的每个组合的结果集。然后,主查询使用左连接将交叉连接的结果与“订单”表连接,以确保即使客户没有下订单也包括所有客户在结果中。
其查询的结果是一个表格,显示了每个客户在每个城市中下达的订单总数。
临时表
SQL中的临时表是在执行SQL语句或事务期间创建和使用的表。它们存储在内存或磁盘上,并在创建它们的会话结束或不再需要时自动删除。临时表通常用于存储中间结果,或将复杂查询分解为更小、更易管理的部分。
它们可以使用CREATE TEMPORARY TABLE语句创建,并像常规表一样使用SQL命令(如SELECT、INSERT、UPDATE和DELETE)进行操作。临时表可以非常有用,用于优化复杂查询并提高性能,因为它们可以帮助减少需要在任何给定时间处理的数据量。
假设有一个名为“销售”的表,包含“日期”“产品”“类别”和“销售额”。想创建一个报告,显示过去一年每个月每个类别的总销售额。为此,可以使用一个临时表来创建每个月销售数据的摘要,然后将临时表与“销售”表连接,以获取每个类别的总销售额,使用DATE_TRUNC函数将“日期”截断到月份级别,按
月份和类别分组销售数据。将此查询的结果插入到“每月销售汇总”表中,该表现在包含每个月销售数据的摘要。
最后,可以将临时表与“销售”连接起来,以获取每个类别的总销售额:WHERE子句用于过滤结果,仅包括过去一年的销售数据,ORDER BY子句用于按类别和月份对结果进行排序,查询的结果是一个表格,显示了过去一年每个月每个类别的总销售额。
具体化视图
SQL中的具体化视图是存储为物理表的预计算结果集。它们基于SQL查询创建和维护,并用于提高频繁执行查询的性能。具体化视图可以按计划或按需刷新,以确保数据是最新的,当针对具体化视图执行查询时,结果集从物理表中检索,而不是从原始表中计算。
这可以提升性能,特别是对于涉及联接或聚合函数的复杂查询,具体化视图通常用于数据仓库和业务智能应用程序中,在这些应用程序中,它们可以帮助加速报告和仪表板。
例如,创建了一个名为“每月销售汇总”的物化视图,其中包含每个月和类别的销售数据摘要。SELECT语句与前面示例中用于创建临时表的语句相同,但是不使用临时表,而是将结果存储在物化视图中。
物化视图与表类似,因为它们将数据存储在磁盘上,但是在基础数据更改时会自动更新。可以手动刷
新物化视图,也可以使用cron作业或其他调度工具设置定期刷新。
使用物化视图的优点在于,它允许您预计算和存储摘要数据,从而减少运行查询所需的时间。物化视图特别适用于经常运行并需要对大型数据集进行复杂计算的报告,但是也有一些限制,
例如可能占用大量磁盘空间,并且在基础数据更改时可能无法立即更新。
总之,掌握高级SQL技术,如窗口函数、CTE、聚合函数、透视表、子查询、交叉连接、临时表和物化视图,可以帮助更有效地处理复杂的数据分析任务。
■李佳
国庆假期“抢票”高峰又要到了,网上各种付费加钱“专人抢票”“光速抢票”真的管用吗?国铁集团表示,铁路12306从未授权任何第三方平台发售火车票,也不可能给第三方平台所谓的“优先购票权”。那么,诸多抢票软件到底靠不靠谱?怎么抢票才是最科学的方式?
抢票软件是否“抢了个寂寞”
登录12306查询9月28日火车票,发现基本没有余票,车票大都是候补状态,但一些平台App的火车票抢票加速功能随时可以支付。我们按照软件自动弹出的选项推荐选择了加付27元人民币来享受“抢票加速”服务,随后致电人工客服询问这27元购买的是究竟是什么产品或服务。
客服人员表示,支付的27元购买的服务包括3项:①线下专人值守抢票;②租车券;③平台优先。
我们以消费者身份提出疑问,铁路官方产生余票时是否优先按照顺序提供给正在候补购票的乘客,满足候补需求后才会在各购票渠道出现余票?客服人员表示认同。
那消费者直接在12306免费候补就可以满足需求,平台所谓的线下专人值守抢票岂不是毫无意义?
对此该客服人员表示,会有专门人员给出回复。一小时后,一位客服工作人员打来电话解释,铁路局(12306软件)凌晨1~5点包括候补车票都是停止出票的,但这段时间通过12306可以退票,此时退票产生的票源就会被火车票线下代售点刷到,而平台提供的线下专人抢票服务就按照顺序优先为支付加速费用的客户抢票。
国铁集团12306官方工作人员在接受采访时明确表示,凌晨1~5点是系统维护工作时间,不能提交办理购票和候补等业务,但是在凌晨1时前已经成功提交候补的旅客,在凌晨1~5点之间出现票源,依然可按照候补规则成功兑现候补票。
付费加速抢票是欺诈吗
火车票网上放票时间据了解,目前市面上的诸多提供付费抢票服务的平台大都声称可以提高成功率,但很难看到其对提高抢票成功率具体方法和逻辑的介绍。
一位具有多年基层审判经验的法官表示,判断提供付费抢票加速服务是否存在欺诈,关键是看所提供
服务事实上是否优于12306官方系统的免费抢票。如果提供的抢票服务排在官方免费服务的序列之后,就有欺诈的嫌疑,如果抢票软件付费服务真的优于12306官方系统免费抢票,这是否违反有关政策规定,则另当别论。
北京市京师律师事务所合伙人张明表示,根据《侵害消费者权益行为处罚办法(2020年修订)》相关规定,实施虚假或者引人误解的宣传行为,构成欺诈。
那如果遭遇抢票软件的“消费欺诈”之后应该怎么办呢?
张明表示,首先保留商家虚假宣传、承诺以及诱导支付等疑似违法违规或者侵权的相关证据。其次,可以与商家协商,提出诉求,无法协商的情况下可以向消协求助,也可以向市场监管部门投诉,必要时还可以向人民法院提起诉讼。
官方支招教“抢票”
据国铁集团发布信息显示,2023年自9月13日开始发售国庆黄金周运输第一天(9月27日)火车票以来,至9月16日开始发售放假第二天(9月30日)车票,铁路火车票售票火热。9月13~16日,铁路共发售火车票7405万张,其中9月15日创下单日售票量2287.7万张的历史新高。
为了能在票务紧张时“抢”到火车票,国铁集团官微“中国铁路”其实已经公布了官方攻略。
方法一:候补购票
铁路12306候补购票功能候补兑现成功率达到75%以上。旅客可通过提报多个“日期、车次、席别”组合的候补订单,延长候补兑现时间,可增加候补成功率。
具体操作方法:查询车次没有余票时,显示列表中会出现“候补”字样可根据需求点击相应车次席别对应的“候补”区域,系统将加入当前候补购票需求列表。
候补购票功能使用规则:
每位用户可提交2个候补订单;
每个订单中可添加发到站相同的2个相邻的乘车日期;
每个乘车日期可添加5个不同“车次+席别”的组合需求;
每个候补订单最多可添加9位乘车人。
提交候补车票订单后,需要同步支付票价预付款,售票系统将持续尝试兑现候补需求,若有匹配需求的车票,系统将自动生成已支付订单并通知购票人,预付款大于实际票款的,系统将自动退回票款差额;若候补购票不成功,候补订单预付款将自动原额退款。
方法二:中转换乘
如果无法买到直达车票,旅客朋友可通过中转换乘、分段乘车的方式满足出行需求。铁路12306将根据旅客出行需求和余票情况,智能推荐有余票的中转换乘方案,供旅客选择。
12306