#1064-内部查询的SQL语法错误

时间:2018-09-30 18:24:28

标签: mysql sql select

我想为每行显示比当前学生年龄大的名册,姓名和人数。但是我收到这个错误

    SELECT sd1.Roll, sd1.Name, COUNT(
        SELECT Roll
        FROM student_details  sd2
        WHERE sd2.Age > sd1.Age
        )

    FROM student_details  sd1 LIMIT 0, 25
MySQL said: Documentation

    #1064 - You have an error in your SQL syntax; 
    check the manual that corresponds to your MariaDB server version 
    for the right syntax to use near 
    'SELECT Roll
            FROM student_details  sd2
            WHERE sd2.Age > sd1.Age
    ' at line 2

在我的查询中。

SELECT sd1.Roll, sd1.Name, COUNT(
    SELECT Roll
    FROM student_details  sd2
    WHERE sd2.Age > sd1.Age
    )

FROM student_details  sd1;

我的数据库表“ student_details”就像

student_details

2 个答案:

答案 0 :(得分:1)

您不能在count聚合函数内使用相关的选择子查询。

您似乎想要为每个学生做的事情是计算每个学生中年龄更大的学生人数。如果没有年龄较大的学生,请使用LEFT JOINcount(sd2.Roll)仅用于计算年龄较小的学生(从sd2中抽取)。

SELECT sd1.Roll, sd1.Name, count(sd2.Roll)
FROM student_details sd1
LEFT JOIN student_details sd2 on
  sd2.Age > sd1.Age
GROUP BY sd1.Roll, sd1.Name

答案 1 :(得分:1)

您不能在count函数内使用这样的查询。但是您可以使用相关的子查询;

SELECT sd1.Roll, sd1.Name, (SELECT COUNT(*)
                            FROM   student_details  sd2
                            WHERE  sd2.Age > sd1.Age)
FROM   student_details sd1
LIMIT  0, 25