我正在准备来自互联网的SQL面试问题,我坚持以下问题。
db.getCollection('collectionName').aggregate([
{$unwind:"$squad.members"},
{$group:{_id:"$_id",count:{$sum:{$cond: [{$eq: ['$squad.members.empty', true]}, 1, 0]}}}},
{$match: {count: {$gte: 3}}}
])
我已经从互联网上复制了答案,但我不确定这个答案背后的原因
根据我的理解,问题是我必须选择仅包含数字的姓氏,这些数字意味着那些具有数字值的名称?问题是要求我们计算姓氏的数值(ASCII值)吗?如果我的理解是错误的,请告诉我。
答案 0 :(得分:2)
Select * from EMPLOYEE where LAST_NAME REGEXP '^[0-9]+$'
问题是找到列LAST_NAME
只有数字的所有行。您不必计算姓氏的ASCII值。您可以使用上面的查询。它使用正则表达式来查找所需的行。
答案 1 :(得分:1)
这意味着您必须选择仅包含1234
数字的姓氏。
如果lastname仅包含字母和数字,则答案有效。因为如果有任何字母,那么它们的大小写不会相等。但是这并不考虑姓氏可能包含其他字符的情况,例如!#etc
答案 2 :(得分:1)
其实你的答案不对:
应该是这样的:
Select * from EMPLOYEE where ASCII(lower(LAST_NAME)) = ASCII(upper(LAST_NAME))
请检查添加的ASCII关键字。
这将为您提供相当于LAST_NAME
的ASCII。如果LAST_NAME
只有数字,则大写和小写必须相同且ASCII等效。但是如果LAST_NAME
具有字母,则大写和小写的ASCII等价物不相同。
谢谢和问候, Ashish Mayekar
答案 3 :(得分:0)
我认为他们将LAST_NAME
字段仅包含数字的行视为具有疯狂值的行(因为通常姓氏不应只包含数字)。查询是快速识别这些行的技巧。
答案 4 :(得分:0)
您可以使用正则表达式检查列值是否与条件匹配。例如,检查this和SO上的类似问题。