HiveBrain v1.2.0
Get Started
← Back to all entries
patternsqlMinor

Merge duplicate rows into one row

Submitted by: @import:stackexchange-dba··
0
Viewed 0 times
rowsmergeduplicateintoonerow

Problem

I have a table like below in MySQL:

+-----+------+-------+-----------+----------+---------+
| #id | NAME | empid | c_lan | Java_lan | Dot_lan |
+-----+------+-------+-----------+----------+---------+
| 1 | raju | 111 | yes | NULL | NULL |
| 1 | raju | 111 | NULL | NO | NULL |
| 1 | raju | 111 | NULL | NULL | na |
| 2 | ramu | 222 | yes | NULL | NULL |
| 2 | ramu | 222 | NULL | NO | NULL |
| 2 | ramu | 222 | NULL | NULL | na |
+-----+------+-------+-----------+----------+---------+


How can I write a query to get the below result?

+-----+------+-------+-------+----------+---------+
| #id | name | empid | c_lan | Java_lan | Dot_lan |
+-----+------+-------+-------+----------+---------+
| 1 | raju | 111 | yes | no | na |
| 2 | ramu | 222 | yes | no | na |
+-----+------+-------+-------+----------+---------+

Solution

SELECT id, name, empid
    MAX(c_lan)    AS c_lan,
    MAX(Java_lan) AS Java_lan,
    MAX(Dot_lan) AS Dot_lan
FROM tbl
GROUP BY id, name, empid;


If you really need no instead of NO, then add LOWER(...).

Edit.

I am assuming a table structure something like

CREATE TABLE Lans (
     // id NAME empid c_lan Java_lan Dot_lan
     id SMALLINT UNSIGNED NOT NULL,
     name VARCHAR(50) NOT NULL,
     empid SMALLINT UNSIGNED NOT NULL,
     c_lan    VARCHAR(10) NULL,
     java_lan VARCHAR(10) NULL,
     dot_lan  VARCHAR(10) NULL,
     PRIMARY KEY(id, name)
 ) ENGINE=InnoDB;

Code Snippets

SELECT id, name, empid
    MAX(c_lan)    AS c_lan,
    MAX(Java_lan) AS Java_lan,
    MAX(Dot_lan) AS Dot_lan
FROM tbl
GROUP BY id, name, empid;
CREATE TABLE Lans (
     // id NAME empid c_lan Java_lan Dot_lan
     id SMALLINT UNSIGNED NOT NULL,
     name VARCHAR(50) NOT NULL,
     empid SMALLINT UNSIGNED NOT NULL,
     c_lan    VARCHAR(10) NULL,
     java_lan VARCHAR(10) NULL,
     dot_lan  VARCHAR(10) NULL,
     PRIMARY KEY(id, name)
 ) ENGINE=InnoDB;

Context

StackExchange Database Administrators Q#103885, answer score: 4

Revisions (0)

No revisions yet.