gpt4 book ai didi

mysql - 替代 mysql 中的子查询

转载 作者:行者123 更新时间:2023-11-30 22:08:14 27 4
gpt4 key购买 nike

我有一张这样交付的产品表

Producer    Category    Quality 
113085 EIT 05
113085 EIT 06
113085 EIT 04
113085 EIT 05
113085 EIT 05
116159 EIT 05
116159 EIT 04
116159 EIT 04
110058 EIT 06
121570 EIT 04

我想比较每个生产商的质量等级与所有生产商的平均质量等级之间的分布(以百分比表示)。像这样:

Producer    Category    Quality     Totalpercent Producerpercent
113085 EIT 05 40 60
113085 EIT 06 20 20
113085 EIT 04 40 20

我有这个选择可以做我想做的事,但它在我的服务器上运行了 70-80 秒,有大约 260.000 条记录,这太多了:-)

您有什么加快速度的技巧吗?

select
Producer as Producer1,
Category as Category1,
Quality as 'Quality1',

Round(((select count(*) from base where Category=Category1 and Quality=Quality1 and deliverydate >'2016-10-01')/
(select count(*) from base where Category=Category1 and deliverydate >'2016-10-01')
*100),1) as 'Totalpercent',

Round(((select count(*) from base where Category=Category1 and Quality=Quality1 and deliverydate >'2016-10-01' and Producer=Producer1)/
((select count(*) from base where Category=Category1 and deliverydate >'2016-10-01' and Producer=Producer1))
*100),1) as 'Producerpercent'

from base where deliverydate >'2016-10-01' and Producer=113085 group by Category1, Quality1

最佳答案

我认为您绝对可以简化您的查询。这是第一个开始:

SELECT
`Producer`,
`Category`,
`Quality`,
round(100*(SELECT COUNT(*) FROM base`subquery` WHERE subquery.Quality = mainquery.Quality) /
(SELECT COUNT(*) FROM base),1)
AS 'Totalpercent',
round((100*COUNT(*))/
(SELECT COUNT(*) FROM base WHERE `Producer`=113085),1)
AS 'Producerpercent'
FROM base `mainquery`
WHERE `Producer`=113085
GROUP BY `Category`, `Quality`

这减少了依赖子查询的数量。

在这里比较:http://www.sqlfiddle.com/#!9/689ce/5

关于mysql - 替代 mysql 中的子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40946843/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com