mysql - 在mysql中显示计数值和多行

标签 mysql sql

我确实尝试通过谷歌搜索自己获得答案,但我找不到解决方案。

实际上我有两张 table 。

这是假设学生表

id  | sname | cid
 1      a      1
 2      b      2
 3      c      2
 4      d      3
 5      e      4
 6      f      3
 7      g      4
 8      h      3

这是类表

id  | sname 
 1      c1    
 2      c2    
 3      c3    
 4      c4    

我想要如下结果:

Result:

id  | cname | sname | count
 1      c1      a       1
 2      c2      b       2
 3      c2      c       2
 4      c3      d       3
 1      c4      e       2
 2      c3      f       3
 3      c4      g       2
 4      c3      h       3

如您所见,结果将如上所示,所有学生姓名将与类(class)名称和人数一起显示。

我该怎么做?

最佳答案

试试这个:

SELECT * FROM
((SELECT C.id,C.sname as cname,S.sname as sname
FROM class C INNER JOIN students S on C.id=S.cid) T1
LEFT JOIN
(Select C.id,count(S.cid) as count
FROM class C INNER JOIN students S on C.id=S.cid
GROUP BY C.id) T2 on T2.id=T1.id)
ORDER BY sname

结果:

ID  CNAME   SNAME   COUNT
1   c1      a       1
2   c2      b       2
2   c2      c       2
3   c3      d       3
4   c4      e       2
3   c3      f       3
4   c4      g       2
3   c3      h       3

SQL Fiddle 中查看结果.

解释:

内部查询的第一部分选择 id、cname 和 sname。第二部分选择计数。在外部查询中,我们只是加入它们。

关于mysql - 在mysql中显示计数值和多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22502811/

相关文章:

python - 连接两列后的 Django 查询集过滤器

sql - 在插入表字段后更改表字段的值

sql - 在 ORDER BY 子句中使用索引

php - MySQL:如何在表值设置为默认值后更新外键字段并创建关系?

mysql - 我如何获得这三个 COUNTS() 的总和?

php - 加入两个 while 循环以根据日期顺序显示

sql - System.Void' 不是映射存储过程方法的有效返回类型

java.lang.String 无法转换为 HQL

Php 插入后错误访问被拒绝用户 'root' @'localhost'(使用密码 : YES)

mysql - 根据邮政编码和它在 MySQL 中的半径选择记录