Javascript 将列表的每次出现次数限制为1

Javascript 将列表的每次出现次数限制为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,

我有一个打印出数字列表的查询。我想将每个唯一的数字限制为1

例如,如果数据库中有三个18,它将打印出18、18、18,如果它们是5的两个匹配项,它将打印出5,5。在这种情况下,我只看到18和5

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;
(对于context
SG
,此处代表
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;
(对于context
SG
,此处代表
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不是一个选项