【问题标题】:Any unique combination in SQL resultSQL 结果中的任何唯一组合
【发布时间】:2021-01-31 11:20:41
【问题描述】:
Sample_Table
----------------
Col_1     Col_2
----------------
String A    AX
String B    VI
String C    MC
String D    MC
String E    AX
String F    AE
String G    AX

对于上表,我需要区分 Col_2 和 Col_1 的值。 我需要我的结果是这样的。

String A    AX
String B    VI
String C    MC
String F    AE

我尝试使用以下 sql 但没有达到我想要的效果。

从 sample_table 中选择不同的 Col_1、Col_2;

从 sample_table 中选择不同的 Col_2; (在这里它只返回 Col_2 值而不是 Col_1)

有什么建议吗?

【问题讨论】:

  • 您可以使用两个 ArrayList() (在 Java 和其他语言中)轻松做到这一点,但不知道 SQL 是如何工作的。您需要它是一个有两列的表格吗?
  • 哪一列决定了这里的顺序?例如,对于AX,我们如何知道字符串A 比字符串G“小”?
  • @ColeHenrich 我需要在我的 SQL 查询中使用该函数吗?
  • @TimBiegeleisen 好吧,在这种情况下,排序无关紧要。
  • 非虚拟机!哇!你让 Gordon Linoff 来回答你的问题!嗯……应该不错!

标签: sql


【解决方案1】:

你可以使用聚合:

select min(Col_1), Col_2
from sample_table
group by col_2;

【讨论】:

    【解决方案2】:

    使用ROW_NUMBER:

    WITH cte AS (
        SELECT *, ROW_NUMBER() OVER (PARTITION BY Col_2 ORDER BY Col_1) rn
        FROM yourTable
    )
    
    SELECT Col_1, Col_2
    FROM cte
    WHERE rn = 1;
    

    这个答案是理想的,因为如果在以后的某个时间,您确实需要根据某种顺序选择给定的Col_2 记录,您只需要修改上面的ORDER BY 子句。

    【讨论】:

    • 这个工作和以下,使用聚合也工作。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-20
    • 1970-01-01
    相关资源
    最近更新 更多