我有一个看起来像这样的数据集:
id | Unit_Ids
1 | {"unit_ids" : ["5442","28397"]}
2 | {"unit_ids" : ["5442","3492","2290"]}
etc.
我正在尝试在Unit_Ids中找到最常出现的值。正如我的示例5442出现在第1行和第2行中一样,它将是最频繁的值。我只是在寻找创建此语句的好方法时遇到麻烦。
谢谢你!
编辑:对不起,我使用MySQL的每个人
答案 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;