帮帮我吧。我在mysql中的表看起来像这样:
kd_mapel|Sem1 |Sem2 |Sem3 EKO-001 |79 |NULL |NULL EKO-002 |NULL |80 |NULL FIS-001 |77 |NULL |NULL FIS-002 |NULL |76 |NULL FIS-201 |NULL |NULL |81 GEO-001 |79 |NULL |NULL INA-001 |79 |NULL |NULL INA-002 |NULL |80 |NULL INA-003 |NULL |NULL |79 ING-001 |77 |NULL |NULL ING-002 |NULL |79 |NULL ING-003 |NULL |NULL |80
预期结果是:
kd_mapel|Sem1 |Sem2 |Sem3 EKO |79 |80 |NULL FIS |77 |76 |81 GEO |79 |NULL |NULL INA |79 |80 |79 ING |77 |79 |80
是否可以将mysql代码用于这些结果?怎么样?
谢谢。
答案 0 :(得分:4)
尝试此查询
select substring(kd_mapel, 1, locate("-", kd_mapel)-1) as kd,
max(sem1), max(sem2), max(sem3)
from tbl
group by kd
| KD | MAX(SEM1) | MAX(SEM2) | MAX(SEM3) |
-------------------------------------------
| EKO | 79 | 80 | (null) |
| FIS | 77 | 76 | 81 |
| GEO | 79 | (null) | (null) |
| INA | 79 | 80 | 79 |
| ING | 77 | 79 | 80 |
如果你有kd_mapel的多个sem记录,你甚至可以使用sum函数。
答案 1 :(得分:2)
尝试
SELECT LEFT(kd_mapel, 3) kd_mapel,
MIN(Sem1) Semi1,
MIN(Sem2) Semi2,
MIN(Sem3) Semi3
FROM table1
GROUP BY LEFT(kd_mapel, 3)
输出:
| KD_MAPEL | SEMI1 | SEMI2 | SEMI3 |
--------------------------------------
| EKO | 79 | 80 | (null) |
| FIS | 77 | 76 | 81 |
| GEO | 79 | (null) | (null) |
| INA | 79 | 80 | 79 |
| ING | 77 | 79 | 80 |
<强> SQLFiddle 强>