最近写项目,有一个特殊查询需求,感觉有点难,后来在他人的帮助下得以实现
借此把实现方法记下来
1,条件:
现有一表table A 里有n个字段,数据几万条 。字段 b为状态字段,字段m为多种类型存储字段
存储数据的格式是
[“DistributorSaleAward”,“Meeting”] 或者[“WineSamplePre”,“EnterDisplay”,“Meeting”]或者
[“WineSamplePre2”,“EnterDisplay”,“Meeting”]或者
[“WineSamplePre2”,“EnterDisplay2”,“Meeting”]或者
[“DistributorSaleAward2”,“Meeting2”]
字段m里存的是字符串数组类型,类型值末尾带2或者不带2两种。 类型值个数在1到k之间 ,k>6。
**
2,查询需求
**
查询统计上万条数据中字段m中类型值末尾不全为2的数据并以b分组
错误写法
select * from A where m not like '%2%' group by b
自己想了很久实在无从下手,在别人提示后,找了一个比较拙的方法
运用知识,mysql自带函数
SELECT
b,
count( 1 )
FROM
(
SELECT
m,
b,
( ( char_LENGTH( m ) - char_LENGTH( REPLACE ( m, ',', '' ) ) ) ) / 1 + 1 totalNum,# m中元素个数
( ( char_LENGTH( m ) - char_LENGTH( REPLACE ( m, '2', '' ) ) ) ) / 1 2Num # m中含2的元素个数
FROM
A
) t1
WHERE
t1.totalNum > t1.2Num
GROUP BY
b