gpt4 book ai didi

mysql - 如何先按 A 列排序,返回 top-3,然后在一个查询中按 B 列排序结果?

转载 作者:可可西里 更新时间:2023-11-01 08:20:47 25 4
gpt4 key购买 nike

(请参阅 SQLFiddle 以获取本文的工作示例)

我有一张股票信息表,如下:

sp100_id  _date         bullishness  agreement
----------------------------------------------
1 2011-03-16 1.01 0.33
1 2011-03-17 0.85 1.28
1 2011-03-18 0.89 1.25
1 2011-03-21 1.46 1.21
1 2011-03-22 0.39 2.53
2 2011-03-16 3.07 1.27
2 2011-03-17 2.09 0.80
2 2011-03-18 0.91 0.12
2 2011-03-21 1.50 0.00
2 2011-03-22 2.62 1.10
3 2011-03-16 0.73 1.13
3 2011-03-17 1.13 1.21
3 2011-03-18 1.12 0.45
3 2011-03-21 1.00 1.01
3 2011-03-22 1.00 0.53
4 2011-03-16 0.40 1.10
4 2011-03-17 2.40 0.03
4 2011-03-18 3.16 0.10
4 2011-03-21 0.86 0.50
4 2011-03-22 1.00 0.10

我需要根据公司 (sp100_id) 随着时间推移的平均看涨度 进入前 3 名:

SELECT 
sp100_id,
AVG(bullishness) as bullishness,
AVG(agreement) AS agreement
FROM stocks
WHERE _date BETWEEN '2011-03-16' AND '2011-03-22'
GROUP BY sp100_id LIMIT 3

这很好用,结果是

SP100_ID    BULLISHNESS AGREEMENT
2 2.038 0.658
4 1.564 0.366
3 0.996 0.866

现在我有了前 3 名,我需要根据 AGREEMENT 对前 3 名重新排序,升序:

SP100_ID    BULLISHNESS AGREEMENT
4 1.564 0.366
2 2.038 0.658
3 0.996 0.866

这可能与一个查询有关吗?我尝试了以下但没有用。它仍然只按看涨

排序
SELECT 
sp100_id,
AVG(bullishness) as bullishness,
AVG(agreement) AS agreement
FROM stocks
WHERE _date BETWEEN '2011-03-16' AND '2011-03-22'
GROUP BY sp100_id
ORDER BY bullishness DESC, agreement ASC LIMIT 3

所以要清楚:(1) 我需要找到平均牛气度最高的前 3 家公司 (2) 然后需要从最低到最高的一致性对这 3 家公司进行排序。最好有一个查询。你知道怎么做吗?

最佳答案

它被称为结构化查询语言,因为您可以构建查询(又名虚拟表)嵌套在其他查询中的结构。

将您的第一个查询(除了它需要自己的 ORDER BY 子句外是正确的)并将其嵌套在另一个查询中,就像这样。

SELECT * 
FROM (
SELECT sp100_id,
AVG(bullishness) as bullishness,
AVG(agreement) AS agreement
FROM stocks
WHERE _date BETWEEN '2011-03-16' AND '2011-03-22'
GROUP BY sp100_id
ORDER BY bullishness DESC
LIMIT 3
) subquery
ORDER BY agreement ASC

开始摆弄:http://sqlfiddle.com/#!2/c9ff0/7/0

关于mysql - 如何先按 A 列排序,返回 top-3,然后在一个查询中按 B 列排序结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12235509/

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