sql 中,distinct 和 group by 的效率,哪个更快
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql 中,distinct 和 group by 的效率,哪个更快相关的知识,希望对你有一定的参考价值。
sql 中去除重复记录,用 distinct 好还是用 group by好。有些地方说,distinct 效率不高
参考技术A 去重用的是distinct,分组才用group by,虽然有时候能达到同样的效果,一般来说distinct的用法更方便,就效率来说,这2个都应该不是问题。本回答被提问者和网友采纳 参考技术B 没用过distinctSQL 查询 Distinct / Group By 不工作
【中文标题】SQL 查询 Distinct / Group By 不工作【英文标题】:SQL query Distinct / Group By not working 【发布时间】:2013-03-06 15:45:25 【问题描述】:我不是一个很好的选择陈述工匠,希望有人能提供帮助。我有两个制造零件表:
STOCK 表中有常备库存。它包含所有零件编号,这些零件编号存在于多行中,因为零件分散在多个位置。这是正确的。
RECEIPT 表是某人构建的表。它只是最近收到零件的年份。每一行只有零件编号和收货年份。零件编号仅明确列出一次。
我正在尝试将“收货年份”列粘贴到原始 STOCK 表上,以仅报告收到零件的年份。我不想更改 STOCK 表中的原始数据,只需根据 PART NUMBER 上的匹配将收据年份添加到每一行。 这是我的选择语句:
SELECT DISTINCT STOCK.Project, STOCK.[Part Id], STOCK.Warehouse, STOCK.Location, RECEIPTS.Year from STOCK LEFT JOIN RECEIPTS on STOCK.[Part Id] = RECEIPTS.ITEM_ID GROUP BY STOCK.Project, STOCK.[Part Id], STOCK.Warehouse, STOCK.Location, RECEIPTS.Year;
不幸的是,我的查询不断复制 RECEIPTS 表中可用的每一年的行,如下所示:
Proj Part Id Whse_ID Loc Receipt_Year
A198.730 5962-9313101MPA 770 GFMSTK-116B2 2004
A198.730 5962-9313101MPA 770 GFMSTK-116B2 2005
A198.730 5962-9313101MPA 770 GFMSTK-116B2 2006
A198.730 5962-9313101MPA 770 GFMSTK-116B2 2007
A198.730 5962-9313101MPA 770 GFMSTK-116B2 2009
A198.730 5962-9313101MPA 770 GFMSTK-116B2 2011
A198.730 5962-9313101MPA 770 GFMSTK-116B2 2012
A198.730 5962-9313101MPA 770 GFMSTK-116B2 2013
仅在 2004 年收到了 5962- 部分(收据中的一个不同行)。
非常感谢任何帮助。谢谢, 杰米
【问题讨论】:
【参考方案1】:通过首先提取数据上的最大日期记录的引物查询解决。
【讨论】:
这没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方发表评论 - 您可以随时评论自己的帖子,一旦您有足够的reputation,您就可以comment on any post。 抱歉,我自己通过两个后续查询解决了这个问题。第一个查询提取最大日期的数据以消除重复记录,然后第二个查询完成我需要的过滤器以上是关于sql 中,distinct 和 group by 的效率,哪个更快的主要内容,如果未能解决你的问题,请参考以下文章
SQL 查询 Distinct / Group By 不工作
mysql sql优化之 优化GROUP BY 和 DISTINCT