寻找最频繁的值SQL语句

时间:2020-03-04 21:23:09

标签: mysql sql

我有一个看起来像这样的数据集:

id | Unit_Ids
1  | {"unit_ids" : ["5442","28397"]}
2  | {"unit_ids" : ["5442","3492","2290"]}
etc.

我正在尝试在Unit_Ids中找到最常出现的值。正如我的示例5442出现在第1行和第2行中一样,它将是最频繁的值。我只是在寻找创建此语句的好方法时遇到麻烦。

谢谢你!

编辑:对不起,我使用MySQL的每个人

2 个答案:

答案 0 :(得分:0)

如果是2016年以上

示例

Declare @YourTable Table ([id] int,[Unit_Ids] varchar(max))  
Insert Into @YourTable Values 
 (1,'{"unit_ids" : ["5442","28397"]}')
,(2,'{"unit_ids" : ["5442","3492","2290"]}')


Select top 1 value 
 From  @YourTable A
 Cross Apply OpenJSON([Unit_Ids],'$.unit_ids') R 
 Order By sum(1) over (partition by value) desc

返回

value
5442

答案 1 :(得分:-1)

我假设您将JSON字符串存储在Unit_Ids字段中。如果这样做,将无法提取或聚合存储在该字段中的数据。

但是,您可以创建一个子表并对其进行查询以获取汇总数据。即:

-- Master table
create table parent(id number primary key);

-- List of units per parent
create table units(
    id number not null,
    parent_id number not null,

    primary key (id, parent_id),
    foreign key (parent_id) references parent(id)
);

-- Insert sample data
insert into parent values 1;
insert into parent values 2;

insert into units(parent_id, id) values(1, 5442);
insert into units(parent_id, id) values(1, 28397);
insert into units(parent_id, id) values(2, 5442);
insert into units(parent_id, id) values(2, 3492);
insert into units(parent_id, id) values(2, 2290);

-- Count the number of times a unit id is in the table
select id, count(id) from units group by id;