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

WeChat applet implements jigsaw puzzle game

This article shares the specific code for impleme...

A detailed discussion on detail analysis in web design

In design work, I often hear designers participati...

Detailed explanation of MySQL high availability architecture

Table of contents introduction MySQL High Availab...

Navicat connects to MySQL8.0.11 and an error 2059 occurs

mistake The following error occurs when connectin...

5 Easy Ways to Free Up Space on Ubuntu

Preface Most people will probably perform this op...

Detailed introduction to CSS priority knowledge

Before talking about CSS priority, we need to und...

How to package the uniapp project as a desktop application

Installing Electron cnpm install electron -g Inst...

JavaScript implements asynchronous acquisition of form data

This article example shares the specific code for...

Solution to "No input file specified" in nginx+php

Today, the error "No input file specified&qu...

In-depth analysis of the Linux kernel macro container_of

1. As mentioned above I saw this macro when I was...

js to realize the production method of carousel

This article shares the specific code for js to r...

How to bind domain name to nginx service

Configure multiple servers in nginx.conf: When pr...