【问题标题】:Group by or Distinct - But several fieldsGroup by 或 Distinct - 但有几个字段
【发布时间】:2014-02-11 19:10:57
【问题描述】:

如何在 1 个字段中使用 DistinctGroup by 语句,其中 SELECT 是全部或至少几个?

示例:使用 SQL SERVER!

SELECT id_product, 
  description_fr, 
  DiffMAtrice, 
  id_mark, 
  id_type, 
  NbDiffMatrice, 
  nom_fr, 
  nouveaute
From C_Product_Tempo

我想要DistinctGroup By nom_fr

刚刚得到答案: 选择 id_product, description_fr, DiffMAtrice, id_mark, id_type, NbDiffMatrice, nom_fr, nouvaute 从 ( SELECT rn = row_number() over(按 [nom_fr] 分区,按 id_mark 排序) , id_product, description_fr, DiffMAtrice, id_mark, id_type, NbDiffMatrice, nom_fr, nouvaute 来自 C_Product_Tempo ) d 其中 rn = 1

而且效果很好!

【问题讨论】:

  • 你能提供几行数据以及你最终想要达到的结果吗?

标签: sql sql-server group-by distinct


【解决方案1】:

如果我对您的理解正确,您只需要nom_fr 的第一行。如果是这样,您可以简单地使用子查询来获取每个nom_fr 中最低的id_product,并获取相应的行;

SELECT * FROM C_Product_Tempo WHERE id_product IN (
  SELECT MIN(id_product) FROM C_Product_Tempo GROUP BY nom_fr
);

An SQLfiddle to test with.

【讨论】:

  • 感谢约阿希姆·伊萨克森。您理解正确,这正是我所需要的。非常感谢。
【解决方案2】:

您需要决定如何处理其他字段。例如,对于数字字段,您想要一个总和吗?平均的?最大限度?敏?对于非数字字段,如果有多个具有相同 nom_fr 的记录,您是否需要来自特定记录的值?

某些 SQL 系统允许您在执行 GROUP BY 时获得“随机”记录,但 SQL Server 不会 - 您必须为不在 GROUP BY 中的列定义正确的聚合。

【讨论】:

    【解决方案3】:

    GROUP BY 用于与聚合函数一起进行分组(请参阅http://www.w3schools.com/sql/sql_groupby.asp),因此如果不计数、汇总等,分组是没有用的。DISTINCT 消除重复项,但如何与您想要的其他列匹配提取,我无法想象,因为一些行会从结果中删除。

    【讨论】:

      猜你喜欢
      • 2016-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-09
      • 1970-01-01
      • 2019-02-28
      • 2010-09-30
      相关资源
      最近更新 更多