ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

SQL7年龄大于24:用24岁边界分清大于和大于等于

SQL7年龄大于24:用24岁边界分清大于和大于等于 我原来写的是age 24截图显示通过。但原样例只有21、20、23、25和NULL没有恰好24岁的用户所以这份数据不能区分与。1. 先明确24岁是否包含在内牛客原题标题是“查找年龄大于24岁的用户信息”正文写“24岁以上”。这里按标题明确的“大于”处理不含24岁SELECT device_id, gender, age, university FROM user_profile WHERE age 24;如果真实业务明确“24岁及以上”则应使用 24。正文措辞可能有歧义应该确认边界不能用一个没有边界值的样例反推两种条件都对。age 是整数列24按数值写不需要刻意写成字符串。SELECT 只输出题目要求的四列不把 id、province 顺便带出来。这张图是历史记录不是本次重新提交的结果也不证明已经测到24岁边界。2. 用四行数据直接看出差别CREATE TABLE sql7_demo ( device_id INTEGER PRIMARY KEY, gender VARCHAR(14) NOT NULL, age INTEGER, university VARCHAR(32) NOT NULL ); INSERT INTO sql7_demo VALUES (701, male, 23, 北京大学), (702, female, 24, 复旦大学), (703, male, 25, 山东大学), (704, female, NULL, 浙江大学);SELECT device_id, age, age 24 AS strictly_older, age 24 AS at_least_24 FROM sql7_demo ORDER BY device_id;本次临时库结果device_idagestrictly_olderat_least_24701230070224017032511704NULLNULLNULL真正改变两个答案的是702这一行。原样例少的也正是这种数据。SELECT device_id, gender, age, university FROM sql7_demo WHERE age 24 ORDER BY device_id;只返回703。若换成包含边界的条件SELECT device_id, gender, age, university FROM sql7_demo WHERE age 24 ORDER BY device_id;返回702、703。年龄为NULL时普通比较得到未知WHERE 不保留这行不是把它自动当作0也不是意味着用户真实年龄不到24。3. 验证范围与这道题的收获本次在 SQLite 3.47.2 临时内存库运行这些共同SQL检查23、24、25、NULL以及空表、全部缺失和原样例的值组合。未运行 MySQL 服务未重提牛客隐藏测试也不声称查明历史评测为什么接受了旧条件。这题的重点不是再背一个 WHERE样例有25岁只能证明25岁被选中了不能证明24岁是否应该被选中。读条件时先确认边界测试时把恰好处于边界的行补上才能区分看似差不多的两条查询。
返回列表