【问题标题】:select a column with how many same value present选择具有多少相同值的列
【发布时间】:2021-12-03 02:16:45
【问题描述】:

我的列上有字符串数据

------------
name 
------------
john-yolo    
john-yolo    
john-yolo    
felix-goran  
carine-carin
carine-carin

我想选择名称出现多少次的名称列

前:

------------
name 
------------
john-yolo-1    
john-yolo-2  
john-yolo-3    
felix-goran-1  
carine-carin-1
carine-carin-2

我怎样才能产生这样的数据?

【问题讨论】:

  • 我使用来自 xampp 7.3.31 的 phpmyadmin,mariadb 版本 10.4.21

标签: sql mariadb mariadb-10.4


【解决方案1】:

MaraiDB 支持 ROW_NUMBER

CREATE TABLE test
    (`name` varchar(12))
;
    
INSERT INTO test
    (`name`)
VALUES

    ('john-yolo'),
    ('john-yolo'),
    ('john-yolo'),
    ('felix-goran'),
    ('carine-carin'),
    ('carine-carin')
;
SELECT CONCAT(name,'-', ROW_NUMBER() OVER(PARTITION BY name)) as  name FROM test
|姓名 | | :------------- | | carine-carin-1 | | carine-carin-2 | | felix-goran-1 | |约翰-约洛-1 | |约翰-约洛-2 | |约翰-约洛-3 |

db小提琴here

【讨论】:

  • 对于其他使用 MySQL 8.0(相对于 MariaDB)的用户,为防止出现 ER_BAD_FIELD_ERROR: Unknown column 'name' in 'window partition by' 错误,您可能需要添加表名或别名列标识符 PARTITION BY test.name Db-Fiddle Example
  • @WillB。 name 不是保留字,因此查询按预期运行dbfiddle.uk/…
  • 检查我提供的抛出错误的例子和没有抛出错误的例子。这不是关于保留名称,而是关于别名列名。因为它在CONCAT() 之外运行良好。第二个查询的转义序列别名不是必需的,只是习惯添加的。
  • @WillB。该网站使用 8.0.12,这对我来说已经很老了
  • None-the-less 仍然适用以防止出现错误。
猜你喜欢
  • 1970-01-01
  • 2012-03-03
  • 2021-02-06
  • 2017-12-24
  • 2019-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多