Mysql SQL:按行条目数排序并联接

Mysql SQL:按行条目数排序并联接,mysql,sql,Mysql,Sql,如何在一列中找到重复的条目(如student_id列中的多行)并将其连接到另一个具有公共id的表(如从另一个表中获取student_id以获取student_名称) 等级: student_id,grade 6,A 1,B 1,F 7,C 6,A 学生: student_id,student_name 1,roy 6,bob 7,art 因此,我可以在student\u id上获得一个仅包含重复学生行的联接表,该表类似于: student_id,student_name,grade 6,bo

如何在一列中找到重复的条目(如student_id列中的多行)并将其连接到另一个具有公共id的表(如从另一个表中获取student_id以获取student_名称)

等级:

student_id,grade
6,A
1,B
1,F
7,C
6,A
学生:

student_id,student_name
1,roy
6,bob
7,art
因此,我可以在
student\u id
上获得一个仅包含重复学生行的联接表,该表类似于:

student_id,student_name,grade
6,bob,A
1,roy,B
1,roy,F
6,bob,A
然后只返回最新数据帧的名称就好了:

bob
roy
试试这个:

select students.student_name
from grades 
inner join students on grades.student_id = students.student_id
group by student_name
having count(*) > 1
例如:

create table grades (student_id int, grade char(1));
insert into grades values (6, 'A'), (1, 'B'), (1, 'F'), (7, 'C'), (6, 'A');
create table students (student_id int, student_name varchar(20));
insert into students values (1, 'roy'), (6,'bob'), (7,'art');

select students.student_name
from grades 
inner join students on grades.student_id = students.student_id
group by student_name
having count(*) > 1

Result:
student_name
bob
roy
这将导致鲍勃和罗伊

Linux上的命令行,假设您有sqlite:

~$ sqlite
SQLite version 2.8.17
Enter ".help" for instructions
sqlite> create table grades (student_id int, grade char(1));
sqlite> insert into grades values (6, 'A');
sqlite> insert into grades values (1, 'B');
sqlite> insert into grades values (1, 'F');
sqlite> insert into grades values (7, 'C');
sqlite> insert into grades values (6, 'A');
sqlite>
sqlite> create table students (student_id int, student_name varchar(20));
sqlite> insert into students values (1, 'roy');
sqlite> insert into students values (6,'bob');
sqlite> insert into students values (7,'art');
sqlite>
sqlite> select students.student_name
   ...> from grades
   ...> inner join students on grades.student_id = students.student_id
   ...> group by student_name
   ...> having count(*) > 1;
roy
bob
sqlite>
试试这个:

select students.student_name
from grades 
inner join students on grades.student_id = students.student_id
group by student_name
having count(*) > 1
例如:

create table grades (student_id int, grade char(1));
insert into grades values (6, 'A'), (1, 'B'), (1, 'F'), (7, 'C'), (6, 'A');
create table students (student_id int, student_name varchar(20));
insert into students values (1, 'roy'), (6,'bob'), (7,'art');

select students.student_name
from grades 
inner join students on grades.student_id = students.student_id
group by student_name
having count(*) > 1

Result:
student_name
bob
roy
这将导致鲍勃和罗伊

Linux上的命令行,假设您有sqlite:

~$ sqlite
SQLite version 2.8.17
Enter ".help" for instructions
sqlite> create table grades (student_id int, grade char(1));
sqlite> insert into grades values (6, 'A');
sqlite> insert into grades values (1, 'B');
sqlite> insert into grades values (1, 'F');
sqlite> insert into grades values (7, 'C');
sqlite> insert into grades values (6, 'A');
sqlite>
sqlite> create table students (student_id int, student_name varchar(20));
sqlite> insert into students values (1, 'roy');
sqlite> insert into students values (6,'bob');
sqlite> insert into students values (7,'art');
sqlite>
sqlite> select students.student_name
   ...> from grades
   ...> inner join students on grades.student_id = students.student_id
   ...> group by student_name
   ...> having count(*) > 1;
roy
bob
sqlite>
试试这个:

select students.student_name
from grades 
inner join students on grades.student_id = students.student_id
group by student_name
having count(*) > 1
例如:

create table grades (student_id int, grade char(1));
insert into grades values (6, 'A'), (1, 'B'), (1, 'F'), (7, 'C'), (6, 'A');
create table students (student_id int, student_name varchar(20));
insert into students values (1, 'roy'), (6,'bob'), (7,'art');

select students.student_name
from grades 
inner join students on grades.student_id = students.student_id
group by student_name
having count(*) > 1

Result:
student_name
bob
roy
这将导致鲍勃和罗伊

Linux上的命令行,假设您有sqlite:

~$ sqlite
SQLite version 2.8.17
Enter ".help" for instructions
sqlite> create table grades (student_id int, grade char(1));
sqlite> insert into grades values (6, 'A');
sqlite> insert into grades values (1, 'B');
sqlite> insert into grades values (1, 'F');
sqlite> insert into grades values (7, 'C');
sqlite> insert into grades values (6, 'A');
sqlite>
sqlite> create table students (student_id int, student_name varchar(20));
sqlite> insert into students values (1, 'roy');
sqlite> insert into students values (6,'bob');
sqlite> insert into students values (7,'art');
sqlite>
sqlite> select students.student_name
   ...> from grades
   ...> inner join students on grades.student_id = students.student_id
   ...> group by student_name
   ...> having count(*) > 1;
roy
bob
sqlite>
试试这个:

select students.student_name
from grades 
inner join students on grades.student_id = students.student_id
group by student_name
having count(*) > 1
例如:

create table grades (student_id int, grade char(1));
insert into grades values (6, 'A'), (1, 'B'), (1, 'F'), (7, 'C'), (6, 'A');
create table students (student_id int, student_name varchar(20));
insert into students values (1, 'roy'), (6,'bob'), (7,'art');

select students.student_name
from grades 
inner join students on grades.student_id = students.student_id
group by student_name
having count(*) > 1

Result:
student_name
bob
roy
这将导致鲍勃和罗伊

Linux上的命令行,假设您有sqlite:

~$ sqlite
SQLite version 2.8.17
Enter ".help" for instructions
sqlite> create table grades (student_id int, grade char(1));
sqlite> insert into grades values (6, 'A');
sqlite> insert into grades values (1, 'B');
sqlite> insert into grades values (1, 'F');
sqlite> insert into grades values (7, 'C');
sqlite> insert into grades values (6, 'A');
sqlite>
sqlite> create table students (student_id int, student_name varchar(20));
sqlite> insert into students values (1, 'roy');
sqlite> insert into students values (6,'bob');
sqlite> insert into students values (7,'art');
sqlite>
sqlite> select students.student_name
   ...> from grades
   ...> inner join students on grades.student_id = students.student_id
   ...> group by student_name
   ...> having count(*) > 1;
roy
bob
sqlite>

查找重复项,然后重新加入以了解更多信息:

SELECT s.student_id, s.student_name
FROM student s
INNER JOIN
   (SELECT g.student_id
    FROM grades g
    GROUP BY g.student_id
    HAVING COUNT(*) > 1) dups
 ON s.student_id = dups.student_id

查找重复项,然后重新加入以了解更多信息:

SELECT s.student_id, s.student_name
FROM student s
INNER JOIN
   (SELECT g.student_id
    FROM grades g
    GROUP BY g.student_id
    HAVING COUNT(*) > 1) dups
 ON s.student_id = dups.student_id

查找重复项,然后重新加入以了解更多信息:

SELECT s.student_id, s.student_name
FROM student s
INNER JOIN
   (SELECT g.student_id
    FROM grades g
    GROUP BY g.student_id
    HAVING COUNT(*) > 1) dups
 ON s.student_id = dups.student_id

查找重复项,然后重新加入以了解更多信息:

SELECT s.student_id, s.student_name
FROM student s
INNER JOIN
   (SELECT g.student_id
    FROM grades g
    GROUP BY g.student_id
    HAVING COUNT(*) > 1) dups
 ON s.student_id = dups.student_id

我不明白,你只想要学生的名字?我不明白,你只想要学生的名字?我不明白,你只想要学生的名字?我不明白,你只想要学生的名字?
COUNT(*)
而不是
COUNT(grades)
。请参见
COUNT(*)
而不是
COUNT(grades)
。请参见
COUNT(*)
而不是
COUNT(grades)
。请参见
COUNT(*)
而不是
COUNT(grades)
。看,谢谢!在linux命令行中测试您的建议的最佳方法是什么?我将成绩表和学生表作为单独的csv文件。起初,我使用的是pandas和sqlite3,但必须有一种更干净、快捷的方法!这是什么?你可以用sqlfiddle.com来测试。我在fiddle上创建了这个示例:我编辑了我的答案,展示了一个可以在LinuxThank上使用SQLite尝试的示例!在linux命令行中测试您的建议的最佳方法是什么?我将成绩表和学生表作为单独的csv文件。起初,我使用的是pandas和sqlite3,但必须有一种更干净、快捷的方法!这是什么?你可以用sqlfiddle.com来测试。我在fiddle上创建了这个示例:我编辑了我的答案,展示了一个可以在LinuxThank上使用SQLite尝试的示例!在linux命令行中测试您的建议的最佳方法是什么?我将成绩表和学生表作为单独的csv文件。起初,我使用的是pandas和sqlite3,但必须有一种更干净、快捷的方法!这是什么?你可以用sqlfiddle.com来测试。我在fiddle上创建了这个示例:我编辑了我的答案,展示了一个可以在LinuxThank上使用SQLite尝试的示例!在linux命令行中测试您的建议的最佳方法是什么?我将成绩表和学生表作为单独的csv文件。起初,我使用的是pandas和sqlite3,但必须有一种更干净、快捷的方法!这是什么?你可以用sqlfiddle.com来测试。我在fiddle上创建了这个示例:我编辑了我的答案,以展示一个可以在Linux上使用SQLite进行尝试的示例