Javascript 将列表的每次出现次数限制为1
我有一个打印出数字列表的查询。我想将每个唯一的数字限制为1 例如,如果数据库中有三个18,它将打印出18、18、18,如果它们是5的两个匹配项,它将打印出5,5。在这种情况下,我只看到18和5Javascript 将列表的每次出现次数限制为1,javascript,mysql,node.js,express,Javascript,Mysql,Node.js,Express,我有一个打印出数字列表的查询。我想将每个唯一的数字限制为1 例如,如果数据库中有三个18,它将打印出18、18、18,如果它们是5的两个匹配项,它将打印出5,5。在这种情况下,我只看到18和5 let sqlSelectBoxInformation = "SELECT longestDimension from box "; connectionBoxInformation.query(sqlSelectBoxInformation, function(err, rows,
let sqlSelectBoxInformation = "SELECT longestDimension from box ";
connectionBoxInformation.query(sqlSelectBoxInformation, function(err, rows, fields) {
if (!err) {
// Check to see if the user entered hashtag is found in the database
// Create a variable to track if the item was found
var data = {
rows: rows,
userHashtag: databaseHashtag
}
res.render('delivery/chooseBox', data);
}
});
您可以使用
不同的:
SELECT DISTINCT longestDimension from box
或分组依据
SELECT longestDimension from box GROUP BY longestDimension
您可以使用不同的:
SELECT DISTINCT longestDimension from box
或分组依据
SELECT longestDimension from box GROUP BY longestDimension
请注意,DISTINCT
始终适用于返回的所有列。在一列的周围放上括号对它的行为没有影响
如果在处理子查询
或多列时希望结果只包含longestdimmension
的唯一值,则可以使用GROUP BY
子句,但随后必须确定要在其他列中返回哪些值的一些规则。您可以通过使用聚合函数来实现这一点,如MIN()
,MAX()
,COUNT()
,SUM()
,等等
简化示例:
SELECT SG.SGID,
MIN(SG.START_TIME), --the lowest start time for this sgid.
COUNT(DISTINCT en.EnrollmentID) --the unique enrollments for this sgid.
FROM StudentGroups SG
INNER JOIN Enrollments EN ON SG.SGID = EN.SGID
GROUP BY SG.SGID;
(对于contextSG
,此处代表StudentGroup
)在原始查询中连接多个表时,在计算和求和时必须小心,因为连接中的重复项可能会给出不正确的结果
另一个选项是使用ROW\u NUMBER()
为每个SGID
返回一行:
SELECT * FROM (
SELECT SG.SGID,
SG.START_TIME,
en.EnrollmentID,
ROW_NUMBER() OVER (PARTITION BY SGID ORDER BY SG.START_TIME) as RN
FROM StudentGroups SG
INNER JOIN Enrollments EN ON SG.SGID = EN.SGID
)
WHERE RN = 1;
这将为每个SGID
的行编号,从1开始,并按SG.START\u TIME
的值排序。它将为每个SGID
返回具有最早开始时间的一行。如果多行具有相同的开始时间,它将或多或少随机选择其中的任何一行。您可以在ORDER BY
子句中添加更多字段,以进一步定义返回的行。请注意DISTINCT
始终适用于所有返回的列。在一列的周围放上括号对它的行为没有影响
如果在处理子查询
或多列时希望结果只包含longestdimmension
的唯一值,则可以使用GROUP BY
子句,但随后必须确定要在其他列中返回哪些值的一些规则。您可以通过使用聚合函数来实现这一点,如MIN()
,MAX()
,COUNT()
,SUM()
,等等
简化示例:
SELECT SG.SGID,
MIN(SG.START_TIME), --the lowest start time for this sgid.
COUNT(DISTINCT en.EnrollmentID) --the unique enrollments for this sgid.
FROM StudentGroups SG
INNER JOIN Enrollments EN ON SG.SGID = EN.SGID
GROUP BY SG.SGID;
(对于contextSG
,此处代表StudentGroup
)在原始查询中连接多个表时,在计算和求和时必须小心,因为连接中的重复项可能会给出不正确的结果
另一个选项是使用ROW\u NUMBER()
为每个SGID
返回一行:
SELECT * FROM (
SELECT SG.SGID,
SG.START_TIME,
en.EnrollmentID,
ROW_NUMBER() OVER (PARTITION BY SGID ORDER BY SG.START_TIME) as RN
FROM StudentGroups SG
INNER JOIN Enrollments EN ON SG.SGID = EN.SGID
)
WHERE RN = 1;
这将为每个SGID
的行编号,从1开始,并按SG.START\u TIME
的值排序。它将为每个SGID
返回具有最早开始时间的一行。如果多行具有相同的开始时间,它将或多或少随机选择其中的任何一行。您可以在ORDER BY
子句中添加更多字段,以进一步定义返回的行。第二个建议为负1,第一个建议为+1谢谢。如何设置一个if条件,如果没有结果返回,它将呈现一个错误页面,如果(true){…}else{}你知道你的sql应该返回某种类型的结果,如果结果集为null,那么对于第二个建议,它将是urelse{}减去1,但是对于第一个建议,它将是+1。如何设置一个if条件,如果没有结果返回,它将呈现一个错误页面,如果(true){…}else{}你知道你的sql应该返回某种类型的结果,如果结果集为null,那么这将是你的else{}Row number不是一个选项Row number不是一个选项