Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何在一次查询中先按A列排序,返回top-3,然后按B列排序结果?_Mysql - Fatal编程技术网

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

Mysql 如何在一次查询中先按A列排序,返回top-3,然后按B列排序结果?,mysql,Mysql,(请参阅此职位的工作示例) 我有一个包含股票信息的表格,如下所示: 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

(请参阅此职位的工作示例)

我有一个包含股票信息的表格,如下所示:

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
)按其平均值
看涨
分为前三名:

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
现在我有了前三名,我需要按照协议重新订购前三名,升序:

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)我需要找到平均牛脾气最高的前三名公司(2)这三名公司需要从最低到最高的协议进行订购。最好有一个查询。您知道怎么做吗?

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

以您的第一个查询为例,它是正确的,只是它需要自己的ORDERBY子句,然后将其嵌套在另一个查询中,如下所示

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
去拉小提琴: