SELECT 语句中的子查询 (MySQL)

Subquery in SELECT statement (MySQL)(SELECT 语句中的子查询 (MySQL))
本文介绍了SELECT 语句中的子查询 (MySQL)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在创建一个 SQL 语句,它将返回一个产品列表以及我可以在每个商店中找到的每种产品的数量.

我的表结构(带有一些示例数据)如下:

<上一页>productID - 尺寸 - 颜色 - stock - storeID1 - S - RED01 - 1 - BCN1 - S - RED01 - 3 - 疯狂2 - S - YEL02 - 0 - BCN2 - S - YEL02 - 2 - 疯狂1 - S - RED01 - 1 - BCN2

我需要一个类似的结果:

<上一页>productID - 尺寸 - stockBCN (BCN + BCN2) - stockMAD1 - S - 2 - 32 - S - 0 - 2

我正在使用此声明,并且仅适用于独特的产品

SELECT DISTINCT prodID, size,(SELECT SUM(stock) FROM stock WHERE storeID IN ('BCN','BCN2') AND prodID = 1 AND size = 'S' AND color = 'RED01' GROUP BY prodID, size, color) AS stockBCN,(从股票中选择 SUM(库存),其中 storeID = 'MAD' AND prodID = 1 AND size = 'S' AND color = 'RED01' GROUP BY prodID, size, color)作为 stockMAD,FROM stock WHERE storeID IN ('BCN','BCN2','MAD')AND prodID = (1) AND size = 'S' AND color = 'RED01'

如何更改它以使其适用于表中的所有行?

解决方案

你可能想利用 GROUP BY 子句而不是在那里使用 DISTINCT,即:

SELECT productId, Size,SUM(CASE WHEN storeID IN ('BCN', 'BCN2') THEN stock ELSE 0 END) AS stockBCN,SUM(CASE WHEN storeID = 'MAD' THEN stock ELSE 0 END) AS stockMAD从股票按产品 ID、尺寸分组

I'm creating an SQL statement that will return a list of products and the quantity of each one of them I can find in every store.

The structure of my table (with some sample data) is as follows:

productID - size - color - stock - storeID  
1         - S    - RED01 - 1     - BCN   
1         - S    - RED01 - 3     - MAD   
2         - S    - YEL02 - 0     - BCN   
2         - S    - YEL02 - 2     - MAD   
1         - S    - RED01 - 1     - BCN2  

I need a result similar to this one:

productID - size - stockBCN (BCN + BCN2) - stockMAD  
1         - S    - 2                     - 3  
2         - S    - 0                     - 2

I'm using this statement, and works fine just for an unique product

SELECT DISTINCT prodID, size,
    (SELECT SUM(stock) FROM stocks WHERE storeID IN ('BCN','BCN2') AND prodID = 1 AND size = 'S' AND color = 'RED01' GROUP BY prodID, size, color) AS stockBCN,
    (SELECT SUM(stock) FROM stocks WHERE storeID = 'MAD' AND prodID = 1 AND size = 'S' AND color = 'RED01' GROUP BY prodID, size, color) AS stockMAD,
FROM stocks WHERE storeID IN ('BCN','BCN2','MAD')
AND prodID = (1) AND size = 'S' AND color = 'RED01'

How can I change it to make it work for all the rows in the table?

解决方案

You probably want to leverage the GROUP BY clause instead of going with DISTINCT there, i.e.:

SELECT productId, Size,
SUM(CASE WHEN storeID IN ('BCN', 'BCN2') THEN stock ELSE 0 END) AS stockBCN,
SUM(CASE WHEN storeID = 'MAD' THEN stock ELSE 0 END) AS stockMAD
FROM stocks
GROUP BY productId, Size

这篇关于SELECT 语句中的子查询 (MySQL)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Hibernate reactive No Vert.x context active in aws rds(AWS RDS中的休眠反应性非Vert.x上下文处于活动状态)
Bulk insert with mysql2 and NodeJs throws 500(使用mysql2和NodeJS的大容量插入抛出500)
Flask + PyMySQL giving error no attribute #39;settimeout#39;(FlASK+PyMySQL给出错误,没有属性#39;setTimeout#39;)
auto_increment column for a group of rows?(一组行的AUTO_INCREMENT列?)
Sort by ID DESC(按ID代码排序)
SQL/MySQL: split a quantity value into multiple rows by date(SQL/MySQL:按日期将数量值拆分为多行)