【问题标题】:Selecting non duplicates from distint query从不同的查询中选择不重复的
【发布时间】:2017-03-05 21:42:37
【问题描述】:

我正在处理一个 SQL 查询,但我无法解决它。 A 有一个这样的表:

SELECT DISTINCT Field1, Field2 
FROM myTable 
WHERE Field3 = 'value';
ID  Field1  Field2
1   Yes     Info
1   No      Info
2   Yes     Info
3   No      Info
3   Yes     Info
4   No      Info

我想要一个没有任何重复值的结果查询。如果有重复值,我希望得到一个结果“是”,在其他情况下,我希望在该字段中具有现有值(是或否)。

ID  Field1  Field2
1   Yes     Info
2   Yes     Info
3   Yes     Info
4   No      Info

提前致谢!

【问题讨论】:

  • 您使用的是哪个 DBMS?
  • 我正在使用 SQL Server。所有答案都有效,我使用了 MAX 答案,因为它花费了最少的时间来完成。谢谢大家!

标签: sql sql-server select duplicates


【解决方案1】:

如果您想优先选择Yes 而不是No 为与ID 对应的给定记录对,那么您可以选择Field1 的最大值(以及Field2 的最大值):

SELECT ID, MAX(Field1) AS Field1, MAX(Field2) AS Field2
FROM myTable
WHERE Field3 = 'value'
GROUP BY ID

【讨论】:

  • 好的,据我所知mysql 在您对行执行分组时自动取第一行(或第一行的值)
  • @DanyalSandeelo 是的,它会这样做......但仅限于某些版本。在最新版本的 MySQL 中,您的查询可能无法运行,因此您可能需要更改它。
【解决方案2】:

id分组,它会自动完成这项工作

 SELECT DISTINCT Field1, Field2 FROM myTable WHERE Field3 = 'value' group by id

【讨论】:

  • 这行不通(我认为),因为您选择的列没有出现在 GROUP BY 中(也不是聚合)。
  • 它在 mysql 中有效,是的,它在 postgres 中无效 @TimBiegeleisen
【解决方案3】:
select DISTINCT 
ID,
case
 when (group_concat(Field1))="YesNo" then "Yes"
 when (group_concat(Field1))="NoYes" then "Yes"
 else (group_concat(Field1)) 
end as Field1,
Field2 from
(SELECT DISTINCT ID,Field1, Field2 
FROM myTable 
WHERE Field3 = 'value')A
group by ID

【讨论】:

    【解决方案4】:

    您可以使用 GROUP BY 查询:

    SELECT CASE WHEN COUNT(* ) > 1 THEN 'Yes' ELSE Field1 END AS Field1, Field2 FROM myTable GROUP BY 2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-27
      • 2020-12-21
      • 1970-01-01
      • 2020-02-08
      • 2017-01-21
      • 1970-01-01
      相关资源
      最近更新 更多