Mysql连接具有相同值的行

标签 mysql join rows

表格分数

身份证分数 Year_1 Year_2 Year_3

1 ---- A ------ 1 ------ 0 ------ 0

1 ---- C ------ 0 ------ 0 ------ 1

2 ---- B ------ 1 ------ 1 ------ 0

2 ---- B ------ 0 ------ 0 ------ 1

首先,当分数相同时,我想加入 ID 上的行,因此在下面的示例中,ID 2 有一行。

身份证分数 Year_1 Year_2 Year_3

1 ---- A ------ 1 ------ 0 ------ 0

1 ---- C ------ 0 ------ 0 ------ 1

2 ---- B ------ 1 ------ 1 ------ 1

但是否也可以删除分数列并将分数放在不同的年份列中,如下所示?

身份证 Year_1 Year_2 Year_3

1 ---- A ------ 0 ------ C

2 ---- B ------ B ------ B

============================================= ==========================

我在使用答案中的命令后遇到的一个问题,我失去了分数。 当表是这样的,一年内有多个分数:

身份证分数 Year_1 Year_2 Year_3

1 ---- A ------ 1 ------ 0 ------ 0

1 ---- B ------ 1 ------ 0 ------ 0

1 ---- C ------ 0 ------ 0 ------ 1

2 ---- B ------ 1 ------ 1 ------ 0

2 ---- B ------ 0 ------ 0 ------ 1


我不会得到如下结果,但会出现一个分数并失去其他分数:

身份证 Year_1 Year_2 Year_3

1 ---- A,B ---- 0 ------ C

2 ---- B ------ B ------ B

最佳答案

试试这个

SELECT id
      ,score
      ,Max(year_1) year_1
      ,Max(year_2) year_2
      ,Max(year_3) year_3
 FROM scores
 GROUP BY id,score

第二个:

SELECT id
      ,group_concat(year_1) year_1
      ,group_concat(year_2) year_2
      ,group_concat(year_3) year_3
  FROM (
    SELECT id
         , CASE WHEN Max(year_1)=1 THEN Max(score) END AS year_1
         , CASE WHEN Max(year_2)=1 THEN Max(score) END AS year_2
         , CASE WHEN Max(year_3)=1 THEN Max(score) END AS year_3
      FROM scores
     GROUP BY id ,score
) as tbl2
GROUP BY id

关于Mysql连接具有相同值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18657682/

相关文章:

mysql - SQL 将行信息合并/转换为列

sql - 在右表上以特殊条件左连接

vba - 在 vba 中向下 move 行范围

r - 通过重复行来转换数据帧并创建一个变量来计算两个变量的值

mysql - 什么是查询偏移量?

php - MySQL:如何返回一个表中的所有行并计算另一个表中具有匹配 ID 的行数

mysql - 更新所有 NULL 字段 MySQL

sql - 我该如何优化这个查询?

mysql - 如何在 MYSQL 中创建此查询?加入是什么?

r - 在R中,根据行之间的差异计算新列