php - 计算不同列中相同的值mysql

标签 php mysql sql count sum

我需要计算同一 ID 在不同列中成熟相同值的次数。 我将尝试用一个例子来澄清: 表格:

+-----+-----+-----+-----+-----+
|  id | d01 | d02 | d03 | d04 |
+=====+=====+=====+=====+=====+
|  1  |  A  |  A  | B   |  B  | 
+-----+-----+-----+-----+-----+
|  2  |  A  |  A  |  A  |  A  | 
+-----+-----+-----+-----+-----+
|  3  |  B  |  B  |  A  |  A  | 
+-----+-----+-----+-----+-----+
|  4  |  A  |  A  |  A  |  A  | 
+-----+-----+-----+-----+-----+
|  5  |  A  |  A  |  A  |  A  | 
+-----+-----+-----+-----+-----+
|  6  |  B  |  A  |  A  |  A  | 
+-----+-----+-----+-----+-----+

我需要知道值“B”对于任何人 (ID) 重复了多少次..

可以这样做吗? 结果

+-----+-----+-----+
|  id |  count B  |
+=====+=====+=====+
|  1  |     2     |
+-----+-----+-----+
|  2  |     0     |
+-----+-----+-----+
|  3  |     2     |
+-----+-----+-----+

我正在考虑使用“SUM”函数,但我不知道如何仅显示单个 ID。 预先感谢,希望问题足够清楚!

最佳答案

如果只有四列:

SELECT id, (d01 = 'B') + (d02 = 'B') + (d03 = 'B') + (d04 = 'B')
FROM tablename

No there are 31 columns

这个问题可以通过两种方式解决:

  1. 对其他 27 列重复该条件:)
  2. 标准化您的结构,以便每个值都依赖于 ID 和代表日历的数值。

PHP 方式

您还可以获取所有列并让 PHP 为您解决这个问题:

$res = $db->query('SELECT * FROM tablename');
foreach ($res->fetchAll(PDO::FETCH_ASSOC) as $row) {
    $id = $row['id'];
    unset($row['id']); // don't count the id column
    $count = count(array_keys($row, 'B', true));

    printf("ID %d: %d\n", $id, $count);
}

关于php - 计算不同列中相同的值mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21978485/

相关文章:

php sql插入双倍,一次空一次带值

php - Laravel 迁移已取消

php - 防止 Laravel 中的用户帐户同时提款

php - 使用具有相同 ClassName 的其他命名空间扩展类

mysql - 在连接中使用别名

Python - 导入 mysql - IDLE/工作 Visual Studio/不工作

java - 不支持从 UNKNOWN 到 UNKNOWN 的转换

mysql - SQL 按两个以上联接进行分组

php - Mysql - 从一个表中获取所有特定行,匹配其他表中的条件和关系(如果有)

php - 如何从 PHP 访问第二个磁盘驱动器?