A brief talk about MySQL pivot tables

A brief talk about MySQL pivot tables

I have a product parts table like this:

part

part_id part_type product_id
--------------------------------------
1A1
2 B 1
3A2
4 B 2
5A3
6 B 3

I want a query that returns a table like this:

product_id part_A_id part_B_id
----------------------------------------
1 1 2
2 3 4
3 5 6

In actual implementation, there will be millions of product parts

1 Answer

Unfortunately, MySQL doesn't have a PIVOT function, but you can model it using aggregate functions and a CASE statement. For a dynamic version you'll need to use a prepared statement:

SET @sql = NULL;
SELECT
 GROUP_CONCAT(DISTINCT
  CONCAT(
   'max(case when part_type = ''',part_type,''' then part_id end) AS part_','_id'
  )
 ) INTO @sql
FROM
 parts;
SET @sql = CONCAT('SELECT product_id,',@sql,' 
         FROM parts 
          GROUP BY product_id');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

If you only have a few columns then you can use the static version:

select product_id,max(case when part_type ='A' then part_id end) as Part_A_Id,max(case when part_type ='B' then part_id end) as Part_B_Id
from parts
group by product_id

Summarize

The above is all the content of MySQL dynamic perspective collected and organized by 123WORDPRESS.COM for you. I hope this article can help you solve the program development problems encountered in MySQL dynamic perspective.

You may also be interested in:
  • Example code of how to implement pivot table in MySQL/MariaDB

<<:  React+TypeScript project construction case explanation

>>:  How to upgrade all Python libraries in Ubuntu 18.04 at once

Recommend

Detailed explanation of the usage of compose function and pipe function in JS

Table of contents compose function Array.prototyp...

Detailed explanation of DIV+CSS naming rules can help achieve SEO optimization

1. CSS file naming conventions Suggestion: Use le...

A brief discussion on using Vue to complete the mobile apk project

Table of contents Basic Configuration Entry file ...

CSS float property diagram float property details

Using the CSS float property correctly can become...

Detailed steps for Python script self-start and scheduled start under Linux

1. Python automatically runs at startup Suppose t...

Example of nginx ip blacklist dynamic ban

When a website is maliciously requested, blacklis...

Echart Bar double column chart style most complete detailed explanation

Table of contents Preface Installation and Config...

Join operation in Mysql

Types of joins 1. Inner join: The fields in the t...

Linux RabbitMQ cluster construction process diagram

1. Overall steps At the beginning, we introduced ...

Analysis of Docker's method for creating local images

The so-called container actually creates a readab...

JS+AJAX realizes the linkage of province, city and district drop-down lists

This article shares the specific code of JS+AJAX ...

Docker+nacos+seata1.3.0 installation and usage configuration tutorial

I spent a day on it before this. Although Seata i...

A brief discussion on creating cluster in nodejs

Table of contents cluster Cluster Details Events ...