php - 在mysql中连接并计算单行中的多行

标签 php mysql sql count concatenation

我想拼接统计同一列的数据,可以拼接但不能统计重复的数据。

这是我的数据表:

| ID  | bills | class |
|-----|-------|-------|
| 1   | 0.5   | 2     |
| 2   | 1     | 1     |
| 3   | 0.5   | 2     |
| 5   | 1     | 3     |
| 6   | 0     | 2     |
| 7   | 0.5   | 1     |
| 8   | 1     | 2     |
| 9   | 1     | 3     |
| 10  | 0.5   | 1     |
| 11  | 0     | 2     |
| 12  | 1     | 1     |
| 13  | 0     | 3     |
| 14  | 1     | 2     |
| 15  | 0     | 1     |
| 16  | 0     | 1     |
| 17  | 0.5   | 3     |
| 18  | 0     | 3     |
| 13  | 0.5   | 3     |

这是我用来连接数据的 sql 查询:

SELECT class AS lesson,
       GROUP_CONCAT( bills ORDER BY bills ) AS bills
FROM tb_presence
GROUP BY class;

下面是我的结果:

| class | bills            |
|-------|------------------|
| 1     | 1,0.5,0.5,1,0,0  |
| 2     | 0.5,0,1,0,1      |
| 3     | 1,1,0,0.5,0,0.5  |

现在我想计算相等的数据,但继续相同的串联。

我想对相同值的数据进行“统计”并串联显示(列观察,仅帮助理解)

| class | bills | observation                 |
|-------|-------|-----------------------------|
| 1     | 2,2,2 | (2=0+0) (2=0.5+0.5) (2=1+1) |
| 2     | 2,1,2 | (2=0+0) (1=0.5) (2=1+1)     |
| 3     | 2,2,2 | (2=0+0) (2=0.5+0.5) (2=1+1) |

这真的可能吗?

最佳答案

这是一个解决方案(感谢 @wchiquito 提供的 sqlfiddle)参见 http://sqlfiddle.com/#!2/2d2c8/1

如您所见,它无法动态确定账单的值(value)并对其进行计数。但是您需要计算每张账单的值(value)。

SELECT class AS lesson,
GROUP_CONCAT( bills ORDER BY bills ) AS bills
,SUM(IF(bills=0,1,0)) AS Count0
,SUM(IF(bills=0.5,1,0)) AS Count05
,SUM(IF(bills=1,1,0)) AS Count1
,COUNT(*) AS totalRecords
,COUNT(*) 
  - SUM(IF(bills=0,1,0))
  - SUM(IF(bills=0.5,1,0))
  - SUM(IF(bills=1,1,0))
  AS Missing
FROM tb_presence GROUP BY class; 

我添加了一条额外的记录,以显示如果您没有考虑所有值,“缺失”列将如何显示。

结果

| LESSON |                                   BILLS | COUNT0 | COUNT05 | COUNT1 | TOTALRECORDS | MISSING |
|--------|-----------------------------------------|--------|---------|--------|--------------|---------|
|      1 | 0.00,0.00,0.50,0.50,1.00,1.00,1.00,4.00 |      2 |       2 |      3 |            8 |       1 |
|      2 |           0.00,0.00,0.50,0.50,1.00,1.00 |      2 |       2 |      2 |            6 |       0 |
|      3 |           0.00,0.00,0.50,0.50,1.00,1.00 |      2 |       2 |      2 |            6 |       0 |

关于php - 在mysql中连接并计算单行中的多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19796375/

相关文章:

mysql - IN 子句在 MYSQL 触发器中的 WHERE 条件下不起作用

php - 使用 PHP 在按下按钮时将 SQL 表导出到 Excel

Oracle sql Developer 中的 Java 字符串参数

javascript - AJAX 提交表单.. 数据未发送

javascript - 在 html 表单提交后保留来自 javascript 的 innerhtml 值

python - 使用 python pyodbc 和 pandas 数据框将数据从 SQL Server 导出到 Excel

sql - 如何将此 sql 查询转换为 mongodb

php - MySQL 返回结果与字符串输入类似但没有句点

php - 获取 zlib 中未压缩数据的大小?

mysql - 设置sql中where条件的默认参数