问答 面试遇到一个数据库相关面试题,想问问这个语句要怎么写

Shunfa · 2024年06月13日 · 最后由 yct 回复于 2024年06月14日 · 3865 次阅读

共收到 7 条回复 时间 点赞

瓶盒箱的编码是有什么规律吗 若是没规律 解题关键都是 10 的倍数
箱码或多或少于比例:select 顶级码,count(*) from table_name group by 顶级码 having count(*)<>101; -- 101 箱码自己有一条数据
盒码、箱码 或多或少于比例:select 父级码,count(*) from table_name where '父级码' is not null group by '父级码' having count(*)<>10;
缺少顶级码 select * from table_name where `顶级码` is null`;
缺少父级码: select * from table_name where `父级码` is null and `码`<>`顶级码`;

学到了,还能用 GPT 来弄,我也弄个账号看看

这种分开,先找瓶和盒之间异常,再找盒和箱之间异常,挺不错的题,只能说现实场景比这个复杂得多。
这种异常就可以拿来做告警,有了告警再去反查日志。

有点东西

这个是我自己写的,有大佬看下我是否有写错吗?

# 码字段为NULL情况
SELECT * FROM Table_name
WHERE '码' IS NULL;


# 父级码字段为NULL情况
SELECT * FROM Table_name
WHERE '父级码' IS NULL;


# 顶级码字段为NULL情况
SELECT * FROM Table_name
WHERE '顶级码' IS NULL;


# 码字段出现父级码或顶级码情况
SELECT * FROM Table_name
WHERE '码' NOT LIKE '瓶码%' ;


# 父级码字段出现码或者顶级码情况
SELECT * FROM Table_name
WHERE '父级码' NOT LIKE '盒码%';


# 顶级码字段出现码或者父级码情况
SELECT * FROM Table_name
WHERE '顶级码' NOT LIKE '箱码%';

# 父级码出现大于10瓶或小于10瓶的情况
SELECT '父级码', count('码') FROM Table_name
WHERE '码' IS NOT NULL OR '顶级码' IS NOT NULL
GROUP BY '父级码'
HAVING COUNT('码') != 10;


# 顶级码出现大于10箱或者小于10箱的情况
SELECT '顶级码', COUNT('父级码') FROM Table_name
WHERE '码' IS NOT NULL OR '父级码' IS NOT NULL
GROUP BY '顶级码'
HAVING COUNT('父级码') != 10;

# 顶级码出现大于100瓶或者小于100瓶的情况
SELECT '顶级码', COUNT('码')  FROM Table_name
WHERE '码' IS NOT NULL OR '父级码' IS NOT NULL
GROUP BY '顶级码'
HAVING COUNT('码') != 100;

我看表中,有些瓶子编号列会写着盒子的编号,
关系表,即是题中的表我用 table 代替,
为纠出对应的列有出现非对应类的编码,假设有其他三个表记录着瓶码 bottle,盒码 box,箱码 carton
1.剔除空值,非对应类的码(比如,瓶码列存在的盒码)。
select * from table where bottle not exist (bottle_table)
or box not exist (box_table) or carton not exist (carton_table).
可以将这些记录复制到另外一个表,
然后将他删除
2.找到瓶码和盒子码不是 1:10 的记录
select * from table group by box having count()!=10
3.找到盒子码和箱子码不是 1:10 的记录
select * from table group by carton having count(
)!=10

只是个人解题,不知道合不合理,请各位指教。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册