mysql - 计算具有相同 WHERE 条件的多个列

标签 mysql sql count multiple-columns

我有一个用户表,其中包含以下列:user_id、teacher_id1、teacher_id2、teacher_id3

带有 id 的教师表

每个用户可以拥有相同的teacher_id1、teacher_id2、teacher_id3 id

我想计算有多少用户拥有同一位老师。

用户表

+----------------------------------------+
| user_Id teacher_id1 teacher_id2 teacher_id3 |
+----------------------------------------+
| 1        1           1           1     |
| 2        2           1           3     |
| 3        2           3           3     |
| 4        2           2           2     |
+----------------------------------------+

教师表

+------+
| id   |
+------+
| 1    |
| 2    |
| 3    |

$id1 的计数为:2

$id2 的计数为:3

$id3 的计数为:2

我尝试过类似的方法,但它不正确!

SELECT COUNT(*) FROM users WHERE concat_ws('',teacher_id1 OR teacher_id2
OR teacher_id3) like '{$id}' ";

最佳答案

您的数据位于三个不同的列中。您需要将其合并为一列,以获得所需的不同计数。为此,您可以使用union all。那么计数就是简单的count(distinct):

select teacher_id, COUNT(distinct USER_ID)
from ((select user_id, teacher_id1 as teacher_id
       from t
      ) union all
      (select user_id, teacher_id2
       from t
      ) union all
      (select user_id, teacher_id3
       from t
      )
     ) s
group by teacher_id;

关于mysql - 计算具有相同 WHERE 条件的多个列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16586848/

相关文章:

mysql - 如何在mysql中根据小时拆分登录和注销时间

sql - 如何在 MySQL 中将 BLOB 转换为 TEXT?

网站上的 PHP 文件 - mysql_connect() 中出现 fatal error

sql - 尝试通过运算符比较 SQL Server 中的时间

用于计算目录和子目录中特定文件的 Powershell 脚本

php - 基于历史的个性化搜索结果

mysql - 我的 'ON DELETE CASCADE ' 不工作

sql - 需要 SSIS 帮助 - 如何从目标获取 ID

java - 如何从一种方法获取 int 值到另一种方法

mysql - 根据其他表中的值计算 (*) 行