【问题标题】:Combine CONCAT and DISTINCT mysql结合 CONCAT 和 DISTINCT mysql
【发布时间】:2021-07-04 11:24:09
【问题描述】:

给定表格测试:

| id | name   | last_name |
---------------------------
| 1  | hello  | world     |
| 2  | hello  | world1    |
| 1  | foo    | bar       |

如何从名称列中选择 distinct 值并将其与前缀连接?

首选输出是:

| prefix_hello |
| prefix_foo   |

我尝试了以下查询,但不起作用:

Select CONCAT("prefix_", DISTINCT(a.name)) from Test a

【问题讨论】:

  • DISTINCT 不是函数,是集合量词,不能这样使用。
  • @jarlh 我不知道,谢谢你的解释。

标签: mysql sql concatenation


【解决方案1】:

架构和插入语句:

 create table Test( id int, name   varchar(50), last_name varchar(50));
 insert into Test values(1  , 'hello'  , 'world');
 insert into Test values(2  , 'hello'  , 'world1');
 insert into Test values(1  , 'foo'    , 'bar'   );

Query#1 以逗号分隔的字符串在单行中获取带有前缀的不同名称:

 select group_concat( distinct concat('prefix_',name)) Names
  from Test a

输出:

Names
prefix_hello,prefix_foo

Query#2 在列中使用不同的名称,前缀为单独的行。

 Select DISTINCT CONCAT("prefix_", a.name)Names from Test a

输出:

Names
prefix_hello
prefix_foo

db小提琴here

【讨论】:

  • 感谢您的回答和解释。不幸的是,我只能选择一个被接受的答案,你的也可以。
  • 别担心。你选一个好的。非常感谢您礼貌的回复。最良好的祝愿。
【解决方案2】:
select CONCAT("prefix_", T1.name) from (select distinct(a.name) as name from test)T1;

【讨论】:

  • 您能否对您的代码进行解释以帮助您回答?
【解决方案3】:

需要像这样更新您的查询

SELECT DISTINCT CONCAT('prefix_', name) nameFROM `test`

注意 当 DISTINCT 子句中仅提供一个表达式时,查询将返回该表达式的唯一值。 当 DISTINCT 子句中提供了多个表达式时,查询将检索列出的表达式的唯一组合。 在 MySQL 中,DISTINCT 子句不会忽略 NULL 值。因此,当您在 SQL 语句中使用 DISTINCT 子句时,您的结果集将包含 NULL 作为不同的值。

您可以使用分组方式

select CONCAT("prefix_", name) 
from Test 
group by name 

了解更多信息 https://www.w3schools.com/sql/sql_distinct.asp

【讨论】:

  • 我宁愿把它表达为“只返回不同的(不同的)。” (在这种情况下,它只是一列。)
【解决方案4】:
Select DISTINCT CONCAT("prefix_", a.name) from Test a

DISTINCT 是一个函数是一个常见的误解。它不是——它是一个查询修饰符。它必须遵循 SELECT。然后在 DISTINCT 之后,您可以使用任何常规的表达式选择列表。

【讨论】:

  • 感谢您的回答和解释。不幸的是,我只能选择一个被接受的答案,你的也可以。
【解决方案5】:

使用分组:

select CONCAT("prefix_", a.name) 
from Test a
group by a.name 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-12
    • 2016-07-24
    • 2015-07-20
    • 2016-08-10
    • 2012-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多