Mysql子查询通过group by优化

标签 mysql group-by

我有一个带有子查询的 MySQL 查询。
SQL fiddle

表结构为:

CREATE TABLE `wildberries` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `brand` VARCHAR(50) NULL DEFAULT NULL,
    `subject` VARCHAR(50) NULL DEFAULT NULL,
    `article` VARCHAR(50) NULL DEFAULT NULL,
    `size` VARCHAR(50) NULL DEFAULT NULL,
    `color` VARCHAR(50) NULL DEFAULT NULL,
    `income` INT(11) NULL DEFAULT NULL,
    `income_sum_price` VARCHAR(50) NULL DEFAULT NULL,
    `ordered` VARCHAR(50) NULL DEFAULT NULL,
    `ordered_sum_price` VARCHAR(50) NULL DEFAULT NULL,
    `ordered_max_by_day` VARCHAR(50) NULL DEFAULT NULL,
    `return_before_payment` VARCHAR(50) NULL DEFAULT NULL,
    `return_before_payment_sum_price` VARCHAR(50) NULL DEFAULT NULL,
    `sales_by_payment` INT(11) NULL DEFAULT NULL,
    `sales_by_payment_sum_price` VARCHAR(50) NULL DEFAULT NULL,
    `return` INT(11) NULL DEFAULT NULL,
    `return_sum_price` VARCHAR(50) NULL DEFAULT NULL,
    `stock` VARCHAR(50) NULL DEFAULT NULL,
    `source_file` VARCHAR(50) NULL DEFAULT NULL,
    `from` DATE NULL DEFAULT NULL,
    `end` DATE NULL DEFAULT NULL,
    `clear_article` VARCHAR(50) NULL DEFAULT NULL,
    `user_id` INT(11) NULL DEFAULT NULL,
    `file_hash` VARCHAR(50) NULL DEFAULT 'sha1(concat(user_id, source_file))',
    PRIMARY KEY (`id`),
    INDEX `from` (`from`),
    INDEX `end` (`end`),
    INDEX `size_color_clear_article` (`size`, `color`, `clear_article`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;

查询是:

SELECT wildberries.clear_article AS clear_article, wildberries.color AS color, wildberries.size AS size, (
SELECT w2.stock
FROM wildberries w2
WHERE w2.clear_article = wildberries.clear_article AND w2.color = wildberries.color AND w2.size = wildberries.size
ORDER BY w2.from DESC
LIMIT 1) AS stock
FROM wildberries
GROUP BY clear_article , color, size
ORDER BY `from` DESC

此查询为我提供了正确的值(最新产品日期的库存)。

但是这个查询太慢了。我尝试添加索引 - 没有结果。

主要思想是:对于每种产品(与clear_article、尺寸和颜色组合)获取最新的“来源”并获取其“库存”。

有人可以给我建议 - 是否可以在没有子查询的情况下重写此查询?

更新:示例数据已在表格中。

最佳答案

如果您首先要检索已经存在的值,为什么要对同一个表进行子选择? 您所拥有内容的简化版本

SELECT clear_article, color, size, stock
FROM wildberries
ORDER BY wildberries.from DESC

关于Mysql子查询通过group by优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47156431/

相关文章:

mysql - 我应该如何构建具有松散关系的 SQL 数据库

oracle - 如何使用Oracle的LISTAGG函数和独特的过滤器?

mysql - MySQL 中的分组查询无法正常工作

python - 两列中 groupby 的唯一值计数

mysql - 将SQL子查询的结果写回数据库

mysql - 将文件从本地计算机传输到远程服务器

MySQL 带小数点的顺序

php - "Base table or view not found"网络托管 pdo_mysql 错误

Laravel 计数多级 groupBy

python - Pandas:多索引二级整数切片