mongodb - 查询 MongoDB,在同一查询中使用 GROUP BY 和 INNER JOIN 列出所有唯一的
问题描述
我正在做一份大学工作,但我无法在 MongoDB 数据库中进行这些查询,我会将数据库链接放在这里以供那些愿意测试的人使用,因为我没有得到它。
问题:列出当前薪水(即 to_date 等于 9999-01-01)大于 90000 的所有唯一员工的姓氏和名字(使用 GROUP BY 方法),按降序输出两个姓名(按姓氏优先排序)然后是名字)并显示他们当前的薪水(使用 INNER JOIN 方法)。
我在 Studio 3T 上尝试了一些 SQL 转换,但我不知道出了什么问题:
SELECT employees.emp_id, employees.first_name, employees.last_name, salaries.salary FROM employees
INNER JOIN salaries ON employees.emp_id = salaries.emp_id
WHERE to_date=9999-01-01 and salary > 90000
GROUP BY employees.emp_id
部分数据员工:
{
"_id" : ObjectId("5fc157d9ba1b05372b2dacf6"),
"birth_date" : "1953-09-02",
"emp_id" : NumberInt(10001),
"first_name" : "Georgi",
"gender" : "M",
"hire_date" : "1986-06-26",
"last_name" : "Facello",
"email_address" : "gfacello@gmail.com"
}
{
"_id" : ObjectId("5fc157d9ba1b05372b2dacf7"),
"birth_date" : "1964-06-02",
"emp_id" : NumberInt(10002),
"first_name" : "Bezalel",
"gender" : "F",
"hire_date" : "1985-11-21",
"last_name" : "Simmel",
"email_address" : "fred.bloggs@company.ie"
}
{
"_id" : ObjectId("5fc157d9ba1b05372b2dacf8"),
"birth_date" : "1959-12-03",
"emp_id" : NumberInt(10003),
"first_name" : "Parto",
"gender" : "M",
"hire_date" : "1986-08-28",
"last_name" : "Bamford",
"email_address" : "fred.bloggs@company.ie"
}
{
"_id" : ObjectId("5fc157d9ba1b05372b2dacf9"),
"birth_date" : "1954-05-01",
"emp_id" : NumberInt(10004),
"first_name" : "Chirstian",
"gender" : "M",
"hire_date" : "1986-12-01",
"last_name" : "Koblick",
"email_address" : "fred.bloggs@company.ie"
}
{
"_id" : ObjectId("5fc157d9ba1b05372b2dacfa"),
"birth_date" : "1955-01-21",
"emp_id" : NumberInt(10005),
"first_name" : "Kyoichi",
"gender" : "M",
"hire_date" : "1989-09-12",
"last_name" : "Maliniak",
"email_address" : "fred.bloggs@company.ie"
}
{
"_id" : ObjectId("5fc157d9ba1b05372b2dacfb"),
"birth_date" : "1953-04-20",
"emp_id" : NumberInt(10006),
"first_name" : "Anneke",
"gender" : "F",
"hire_date" : "1989-06-02",
"last_name" : "Preusig",
"email_address" : "fred.bloggs@company.ie"
}
{
"_id" : ObjectId("5fc157d9ba1b05372b2dacfc"),
"birth_date" : "1957-05-23",
"emp_id" : NumberInt(10007),
"first_name" : "Tzvetan",
"gender" : "F",
"hire_date" : "1989-02-10",
"last_name" : "Zielinski",
"email_address" : "fred.bloggs@company.ie"
}
{
"_id" : ObjectId("5fc157d9ba1b05372b2dacfd"),
"birth_date" : "1958-02-19",
"emp_id" : NumberInt(10008),
"first_name" : "Saniya",
"gender" : "M",
"hire_date" : "1994-09-15",
"last_name" : "Kalloufi",
"email_address" : "fred.bloggs@company.ie"
}
{
"_id" : ObjectId("5fc157d9ba1b05372b2dacfe"),
"birth_date" : "1952-04-19",
"emp_id" : NumberInt(10009),
"first_name" : "Sumant",
"gender" : "F",
"hire_date" : "1985-02-18",
"last_name" : "Peac",
"email_address" : "fred.bloggs@company.ie"
}
{
"_id" : ObjectId("5fc157d9ba1b05372b2dacff"),
"birth_date" : "1963-06-01",
"emp_id" : NumberInt(10010),
"first_name" : "Duangkaew",
"gender" : "F",
"hire_date" : "1989-08-24",
"last_name" : "Piveteau",
"email_address" : "fred.bloggs@company.ie"
}
{
"_id" : ObjectId("5fc157d9ba1b05372b2dad00"),
"birth_date" : "1953-11-07",
"emp_id" : NumberInt(10011),
"first_name" : "Mary",
"gender" : "F",
"hire_date" : "1990-01-22",
"last_name" : "Sluis",
"email_address" : "fred.bloggs@company.ie"
}
{
"_id" : ObjectId("5fc157d9ba1b05372b2dad01"),
"birth_date" : "1960-10-04",
"emp_id" : NumberInt(10012),
"first_name" : "Patricio",
"gender" : "M",
"hire_date" : "1992-12-18",
"last_name" : "Bridgland",
"email_address" : "fred.bloggs@company.ie"
}
{
"_id" : ObjectId("5fc157d9ba1b05372b2dad02"),
"birth_date" : "1963-06-07",
"emp_id" : NumberInt(10013),
"first_name" : "Eberhardt",
"gender" : "M",
"hire_date" : "1985-10-20",
"last_name" : "Terkki",
"email_address" : "fred.bloggs@company.ie"
}
一些薪资数据:
{
"_id" : ObjectId("5fc157daba1b05372b2db050"),
"emp_id" : NumberInt(10001),
"from_date" : "1986-06-26",
"salary" : NumberInt(60117),
"to_date" : "1987-06-26"
}
{
"_id" : ObjectId("5fc157daba1b05372b2db052"),
"emp_id" : NumberInt(10001),
"from_date" : "1987-06-26",
"salary" : NumberInt(62102),
"to_date" : "1988-06-25"
}
{
"_id" : ObjectId("5fc157daba1b05372b2db054"),
"emp_id" : NumberInt(10001),
"from_date" : "1988-06-25",
"salary" : NumberInt(66074),
"to_date" : "1989-06-25"
}
{
"_id" : ObjectId("5fc157daba1b05372b2db056"),
"emp_id" : NumberInt(10001),
"from_date" : "1989-06-25",
"salary" : NumberInt(66596),
"to_date" : "1990-06-25"
}
{
"_id" : ObjectId("5fc157daba1b05372b2db058"),
"emp_id" : NumberInt(10001),
"from_date" : "1990-06-25",
"salary" : NumberInt(66961),
"to_date" : "1991-06-25"
}
{
"_id" : ObjectId("5fc157daba1b05372b2db059"),
"emp_id" : NumberInt(10001),
"from_date" : "1991-06-25",
"salary" : NumberInt(71046),
"to_date" : "1992-06-24"
}
{
"_id" : ObjectId("5fc157daba1b05372b2db05b"),
"emp_id" : NumberInt(10001),
"from_date" : "1992-06-24",
"salary" : NumberInt(74333),
"to_date" : "1993-06-24"
}
{
"_id" : ObjectId("5fc157daba1b05372b2db05d"),
"emp_id" : NumberInt(10001),
"from_date" : "1993-06-24",
"salary" : NumberInt(75286),
"to_date" : "1994-06-24"
}
{
"_id" : ObjectId("5fc157daba1b05372b2db05f"),
"emp_id" : NumberInt(10001),
"from_date" : "1994-06-24",
"salary" : NumberInt(75994),
"to_date" : "1995-06-24"
}
{
"_id" : ObjectId("5fc157daba1b05372b2db062"),
"emp_id" : NumberInt(10001),
"from_date" : "1995-06-24",
"salary" : NumberInt(76884),
"to_date" : "1996-06-23"
}
{
"_id" : ObjectId("5fc157daba1b05372b2db064"),
"emp_id" : NumberInt(10001),
"from_date" : "1996-06-23",
"salary" : NumberInt(80013),
"to_date" : "1997-06-23"
}
{
"_id" : ObjectId("5fc157daba1b05372b2db066"),
"emp_id" : NumberInt(10001),
"from_date" : "1997-06-23",
"salary" : NumberInt(81025),
"to_date" : "1998-06-23"
}
{
"_id" : ObjectId("5fc157daba1b05372b2db068"),
"emp_id" : NumberInt(10001),
"from_date" : "1998-06-23",
"salary" : NumberInt(81097),
"to_date" : "1999-06-23"
}
{
"_id" : ObjectId("5fc157daba1b05372b2db06a"),
"emp_id" : NumberInt(10001),
"from_date" : "1999-06-23",
"salary" : NumberInt(84917),
"to_date" : "2000-06-22"
}
{
"_id" : ObjectId("5fc157daba1b05372b2db06c"),
"emp_id" : NumberInt(10001),
"from_date" : "2000-06-22",
"salary" : NumberInt(85112),
"to_date" : "2001-06-22"
}
{
"_id" : ObjectId("5fc157daba1b05372b2db06e"),
"emp_id" : NumberInt(10001),
"from_date" : "2001-06-22",
"salary" : NumberInt(85097),
"to_date" : "2002-06-22"
}
MongoDbDump BSON 文件:employees.agz
员工样本数据库(由 Siemens Corporate Research 的 Fusheng Wang 和 Carlo Zaniolo 创建)
谢谢
解决方案
您可以使用$project
和$lookup
。
$project
包括或排除字段$project$lookup
加入收藏。在这里,我使用了uncorrelated-sub-queries。$lookup
但是也有标准
这是代码
db.Employees.aggregate([
{
"$project": {
_id: 1,
emp_id: 1,
first_name: 1,
last_name: 1
}
},
{
"$lookup": {
"from": "Salaries",
let: { eId: "$emp_id" },
pipeline: [
{
$match: {
$expr: {
$and: [
{ $eq: [ "$$eId", "$emp_id" ] },
{ $gt: [ "$salary", 80000 ] },
{ $eq: [ "$to_date", "2002-06-22" ] }
]
}
}
}
],
"as": "salary"
}
}
])
工作Mongo游乐场
推荐阅读
- vim - 如何定义单个文件的设置并使用 git 将它们与文件同步?
- json - 验证 JSON 字段排序顺序
- matlab - 训练网络时如何解决“Incorrectly defined MiniBatchable Datastore”错误
- forms - 使用 VueJS + Laravel 发送表单会导致 419 错误
- python - python中的grep多个字符串功能
- javascript - Angular 4在console.log中获取数据但不在html中呈现
- keras - Keras 二进制分类
- ios - 'NSInternalInconsistencyException' 原因:'Could not load NIB in bundle' 出列 tableview 单元格时
- pytorch - nn.CrossEntropyLoss() 的 Pytorch 输入
- c - 如何在我的 bst_insert_node 函数中删除此分段错误?