計算機科学のブログ

SQL - SQLite - Python - 高度なSELECT文 - 新たな目でデータを見る - LIMIT, 制限

Head First SQL ―頭とからだで覚えるSQLの基本Lynn Beighley(著)、 佐藤 直生(監訳)、 松永 多苗子(翻訳)、 オライリージャパンの 6章(高度なSELECT文 - 新たな目でデータを見る)、p.275(自分で考えてみよう)の解答を求めてみる。

schema11.sql

select first_name, sum(sales)
from cookie_sales
group by first_name
order by sum(sales) desc
limit 1, 1;

コード

sample11.py

#! /usr/bin/env python3
import sqlite3

con = sqlite3.connect('sample.db')
cur = con.cursor()


def p(cur: sqlite3.Cursor, table: str):
    cur.execute(
        f"""
select * from {table}
"""
    )
    if (d := cur.description) is not None:
        print([t[0] for t in d])
    for row in cur.fetchall():
        print(row)


p(cur, 'cookie_sales')


with open(f'schema11.sql') as f:
    cur.execute(f.read())
if (d := cur.description) is not None:
    print([t[0] for t in d])
    for row in cur.fetchall():
        print(row)

cur.close()
con.close()

入出力結果(Terminal, Zsh)

% ./sample11.py 
['id', 'first_name', 'sales', 'sale_date']
(1, 'リンゼイ', 32.02, '2007/3/06')
(2, 'パリス', 26.53, '2007/3/06')
(3, 'ブリトニー', 11.25, '2007/3/06')
(4, 'ニコール', 18.96, '2007/3/06')
(5, 'リンゼイ', 9.16, '2007/3/07')
(6, 'パリス', 1.52, '2007/3/07')
(7, 'ブリトニー', 43.21, '2007/3/07')
(8, 'ニコール', 8.05, '2007/3/07')
(9, 'リンゼイ', 17.62, '2007/3/08')
(10, 'パリス', 24.19, '2007/3/08')
(11, 'ブリトニー', 3.4, '2007/3/08')
(12, 'ニコール', 15.21, '2007/3/08')
(13, 'リンゼイ', 0.0, '2007/3/09')
(14, 'パリス', 31.99, '2007/3/09')
(15, 'ブリトニー', 2.58, '2007/3/09')
(16, 'ニコール', 0.0, '2007/3/09')
(17, 'リンゼイ', 2.34, '2007/3/10')
(18, 'パリス', 13.44, '2007/3/10')
(19, 'ブリトニー', 8.78, '2007/3/10')
(20, 'ニコール', 26.82, '2007/3/10')
(21, 'リンゼイ', 3.71, '2007/3/11')
(22, 'パリス', 0.56, '2007/3/11')
(23, 'ブリトニー', 34.19, '2007/3/11')
(24, 'ニコール', 7.77, '2007/3/11')
(25, 'リンゼイ', 16.23, '2007/3/12')
(26, 'パリス', 0.0, '2007/3/12')
(27, 'ブリトニー', 4.5, '2007/3/12')
(28, 'ニコール', 19.22, '2007/3/12')
['first_name', 'sum(sales)']
('パリス', 98.23)
%