如何获得第一列的所有最小值,然后获得第一列的每个最小值的第二列的所有最小值?

时间:2019-06-05 09:24:18

标签: sql db2

大家好,我是FinnStark,

我正在为projet开发SQL,我需要获取另一列的最小值,其中我有另一列的最小值。我得到的结果可行,但根本没有优化

这是我现在的sql请求:

const std::string &getName() const
{
    return name;
}

但是我需要获取Col4的所有最小值,然后获取Col4的每个最小值的所有Col5最小值,然后获取Col5的每个最小值的所有Col6最小值,所以现在我有了这个:

SELECT  
  Col1,
  Col2,
  Col3,
  MIN(Col4) AS "Col4",
  MIN(Col5) AS "Col5",
  MIN(Col6) AS "Col6"
FROM    MyTable
GROUP BY    
  Col1,
  Col2,
  Col3

第二个请求的结果很好,但是根本没有优化。要获得500个结果需要花费超过1分钟的时间,而我至少有一百万行。

能否请您告诉我是否有更好的方法?

此致, FinnStark

3 个答案:

答案 0 :(得分:0)

我不确定我是否理解正确,但是请尝试以下方法:

SELECT  col1,
        col2,
        col3,
        col4,
        col5,
        MIN(col6) as "col6"
FROM   (
        SELECT  col1,
                col2,
                col3,
                col4,
                MIN(col5) AS "col5",
                col6
        FROM   (SELECT  Col1,
                        Col2,
                        Col3,
                        MIN(Col4) AS "Col4",
                        Col5,
                        Col6
                 FROM   MyTable
                 GROUP  BY Col1,
                           Col2,
                           Col3,
                           Col5,
                           Col6)
        GROUP  BY col1,
                   col2,
                   col3,
                   col4,
                   col6
        )
GROUP BY col1,
         col2,
         col3,
         col4,
         col5

答案 1 :(得分:0)

如果我理解正确,则可以使用窗口功能:

SELECT Col1, Col2, Col3, Col4, Col5, Col6
FROM (SELECT t.*,
             MIN(col4) OVER (PARTITION BY col1, col2, col3) as min_col4,
             MIN(col5) OVER (PARTITION BY col1, col2, col3, col4) as min_col5,
             MIN(col6) OVER (PARTITION BY col1, col2, col3, col4, col5) as min_col6
      FROM MyTable t
     ) t
WHERE col4 = min_col4 AND
      col5 = min_col5 AND
      col6 = min_col6

答案 2 :(得分:0)

使用row_number()函数。

import os
import requests
from bs4 import BeautifulSoup


desktop = os.path.expanduser("~/Desktop")

url = 'https://www.ici.org/research/stats'

response = requests.get(url)

soup = BeautifulSoup(response.text, 'html.parser')
excel_files = soup.select('a[href*=xls]')

for each in excel_files:
    if 'Supplement: Worldwide Public Tables' in each.text:
        link = 'https://www.ici.org' + each['href']

        filename = each['href'].split('/')[-1]

        if os.path.isfile(desktop + '/' + filename):
            print ('*** File already exists: %s ***' %filename)
            continue

        resp = requests.get(link)
        output = open(desktop + '/' + filename, 'wb')
        output.write(resp.content)
        output.close()
        print ('Saved: %s' %filename)