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

cl25kdpy  于 2021-06-19  发布在  Mysql
关注(0)|答案(2)|浏览(493)

我想显示每一行的学生名单、姓名和比当前学生年龄大的学生人数。但我得到了这个错误

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\u details”类似于

pobjuy32

pobjuy321#

不能在内部使用查询 count 像那样工作。但可以使用相关子查询;

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

bhmjp9jg2#

不能在内部使用相关的select子查询 count 这样的聚合函数。
似乎你想做的是为每个学生获得一个计数有多少学生是从每个学生年龄较大。使用 LEFT JOIN 如果没有大一点的学生 count(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

相关问题