库存生产-实用sql知识:如何在保证去重分组的情况下获取组内最新数据(可按时间排序),distinct +group by +嵌套结果 的联合妙用

这是花了一个小时实践出来的!

网上有特别多的distinct +group by 的比较区别的,几乎没有几篇文章说他们的联合妙用。
步入正题,先说我发现妙用的基于实际问题:
库存与入库单的一个关系业务:在统计库存时,需要带出与库存相关的且是最近的入库单的一个入库人作为库存数据的一个属性
那么问题来了,业务中一个库存记录可能会存在多张入库单与之关联,要去取最新的入库单的信息与库存信息关联,假设关联入库单信息为lastInUserName(最后入库人),不可避免的查出一个重复的库存记录,但实际上数据库只有一条这样的记录,
那咋整: 是的 group by 登场了,我直接group by 库存记录id ,就只会存在一条记录了,group by必须存在。
未满足的要求:我们还需要取最新的库存入库单的信息condition_in,怎么取呢?我们既不能简单升序或降序来排序入库单号、id,实际入库时间来获取到我们想要的结果。
为什么? 因为我们不止一条库存记录,而且 group by 本身是不会排序的,他只会保留最早物理插入数据库的那个符合去重的条件(某些业务可能刚刚需要这样的),和本次要求是不符合
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: `DISTINCT` 是一个保留词,它用于返回不重复的行。 例如,假设有一个表,其中有一列名为 "color",并且该表包含以下数据: | color | |---------| | red | | blue | | green | | red | | yellow | 如果你执行 `SELECT DISTINCT color FROM table_name`,你将会得到以下结果: | color | |---------| | red | | blue | | green | | yellow | `GROUP BY` 是另一种用于返回不重复行的方法。 它与 `DISTINCT` 不同,因为它可以根据一个或多个列对结果集进行分组。 例如,假设有一个表,其中有两列: "color" 和 "size",并且该表包含以下数据: | color | size | |---------|-------| | red | small | | blue | small | | green | medium| | red | large | | yellow | large | 如果你执行 `SELECT color, size FROM table_name GROUP BY color`,你将会得到以下结果: | color | size | |---------|-------| | blue | small | | green | medium| | red | small | | yellow | large | 相比而言,`DISTINCT` 比 `GROUP BY` 更简单且常用,并且在许多情况下,它们的性能都很好。 但是,在某些情况下,使用 `GROUP BY` 可能会比使用 `DISTINCT` 更有效,因为它可以利用索引并且可以在分组的同时返回多个列。 所以,在选择使用 `DISTINCT` 还是 `GROUP BY` 时, ### 回答2: SQL中的distinct关键字的作用是用于返回唯一不重复的结果集。当我们查询一个包含重复值的表时,可以使用distinct来消除这些重复值,只返回唯一的结果。 而group by关键字的作用是将结果集按照指定的列进行分组,然后对每个组进行聚合计算,例如求和、求平均值等。 在效率方面,distinctgroup by可以说是两种不同的功能,难以直接进行比较。不过一般情况下,在对大数据量的表进行处理时,group by 的效率会相对较低。这是因为group by需要对结果集进行分组,并对每个组进行聚合操作,这个过程需要耗费相对较多的计算资源和时间。而distinct只需要通过比较每一行的值是否重复即可,相对来说比较简单和高效。 因此,如果我们只是需要去除重复值,并不需要进行聚合计算的话,使用distinct会比group by更加高效。但在某些需要进行分组聚合计算的情况下,group by是必要的,而distinct无法实现。所以,在实际应用中,我们需要根据具体的需求来决定使用哪个关键字。 ### 回答3: SQL中的distinct关键字用于查询结果集中去除重复的行。它根据SELECT语句中指定的列,对结果集进行去重处理,只返回不重复的行。 而group by子句则是将结果集按照指定的列进行分组,从而通过聚合函数对每个分组进行统计和计算。 关于效率问题,通常情况下,group by的效率稍低于distinct。因为group by需要对结果集进行分组处理,对数据进行排序和聚合操作,需要更多的计算资源和时间。 而distinct只需对结果集进行一次扫描来检查和去除重复行,效率相对较高。它适用于在查询结果中仅需要列的唯一值的情况。 然而,具体的效率取决于数据量的大小、表结构和索引的使用。在某些情况下,使用正确的索引,合理地使用group by可以达到较高的效率。 总的来说,如果只是需要得到结果集中某个列的去重值,可使用distinct关键字来达到较高的效率;如果需要对结果集进行分组和聚合操作,使用group by子句是更合适的选择,虽然效率稍低。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值