gpt4 book ai didi

mysql - 选择显示第一个唯一值的行

转载 作者:行者123 更新时间:2023-11-29 21:31:57 24 4
gpt4 key购买 nike

例如,我现在有:

C1      C2        C3
---------------------
A 1 8
B 2 7
A 2 6
B 3 3
C 4 3

我想以 Actor 为引用,选择C1第一次出现,也就是说我想选择第一、二、五行。

我怎样才能做到这一点?

非常感谢。

最佳答案

我看到三种方法可以做到这一点,具体取决于您是否有唯一定义记录顺序的列,以及您愿意使用 MySql 的哪种非标准功能。

1。您有一个唯一定义订单的列

假设您有这样一个列,它名为 id,然后执行以下操作:

SELECT C1, C2, C3
FROM T1
WHERE id IN (
SELECT Min(id)
FROM T1
GROUP BY C1);

2。您没有定义顺序的列

在这种情况下,您完全依赖于 MySql 为查询结果选择的顺序。

在这种情况下,我可以建议两种方法来产生所需的结果,由于第一种方法相当简单,因此第二种方法可能就没那么有趣了。

2.1 非标准 GROUP BY 子句

MySql 允许您将 GROUP BY 与包含非分组依据列的 SELECT 列表结合使用,这些列也不会聚合。这在标准 SQL 中是不允许的,其他引擎拒绝这种查询。

但它在 MySql 中有效:

SELECT C1, C2, C3
FROM T1
GROUP BY C1;

2.2。 MySql 用户变量

在这种情况下,您可以使用用户变量获得所需的输出。在执行SELECT期间,您可以收集您在变量中访问过的C1值,然后添加作为WHERE条件,任何下一个C1值可能不会出现在这个变量:

SELECT      C1, C2, C3
FROM T1,
(SELECT @done := '') as init
WHERE NOT find_in_set(C1, @done)
AND (@done := concat_ws(',', @done, C1)) is not null;

所有三种情况下的输出:

C1      C2        C3
---------------------
A 1 8
B 2 7
C 4 3

SQL fiddle of last solution .

说明

评估顺序如下:

  • 评估FROM子句,引擎会将空字符串分配给变量@done
  • 对于表中的每条记录,都会评估 WHERE 子句。如果第一个条件成功,则意味着 C1 的值以前从未被访问过,因此会评估下一个条件,该条件始终产生 true,但会作为副作用添加 < strong>C1 到字符串 @done,以逗号分隔;
  • 如果WHERE的第一个条件不成立,则意味着C1的值之前已经被访问过,因此不会输出记录。此外,由于第一个条件失败,引擎将不会评估第二个子句,因为它已经确定整个 WHERE 失败。

关于mysql - 选择显示第一个唯一值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35187443/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com