計算機科学のブログ

SQL - SQLite - Python - 高度なSELECT文 - 新たな目でデータを見る - order by 1

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

schema7.sql

drop table if exists cookie_sales;
create table cookie_sales(
    id integer primary key autoincrement,
    first_name text,
    sales real,
    sale_date date
);
insert into cookie_sales
(first_name, sales, sale_date)
values
('リンゼイ', 32.02, '2007/3/06'),
('パリス', 26.53, '2007/3/06'),
('ブリトニー', 11.25, '2007/3/06'),
('ニコール', 18.96, '2007/3/06'),
('リンゼイ', 9.16, '2007/3/07'),
('パリス', 1.52, '2007/3/07'),
('ブリトニー', 43.21, '2007/3/07'),
('ニコール', 8.05, '2007/3/07'),
('リンゼイ', 17.62, '2007/3/08'),
('パリス', 24.19, '2007/3/08'),
('ブリトニー', 3.40, '2007/3/08'),
('ニコール', 15.21, '2007/3/08'),
('リンゼイ', 0, '2007/3/09'),
('パリス', 31.99, '2007/3/09'),
('ブリトニー', 2.58, '2007/3/09'),
('ニコール', 0, '2007/3/09'),
('リンゼイ', 2.34, '2007/3/10'),
('パリス', 13.44, '2007/3/10'),
('ブリトニー', 8.78, '2007/3/10'),
('ニコール', 26.82, '2007/3/10'),
('リンゼイ', 3.71, '2007/3/11'),
('パリス', 0.56, '2007/3/11'),
('ブリトニー', 34.19, '2007/3/11'),
('ニコール', 7.77, '2007/3/11'),
('リンゼイ', 16.23, '2007/3/12'),
('パリス', 0, '2007/3/12'),
('ブリトニー', 4.50, '2007/3/12'),
('ニコール', 19.22, '2007/3/12');

schema7_0.sql

select first_name, sales from cookie_sales
order by first_name;

コード

sample7.py

#! /usr/bin/env python3
import sqlite3

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

with open(f'schema7.sql') as f:
    cur.executescript(f.read())
con.commit()

with open(f'schema7_0.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)

% ./sample7.py 
['first_name', 'sales']
('ニコール', 18.96)
('ニコール', 8.05)
('ニコール', 15.21)
('ニコール', 0.0)
('ニコール', 26.82)
('ニコール', 7.77)
('ニコール', 19.22)
('パリス', 26.53)
('パリス', 1.52)
('パリス', 24.19)
('パリス', 31.99)
('パリス', 13.44)
('パリス', 0.56)
('パリス', 0.0)
('ブリトニー', 11.25)
('ブリトニー', 43.21)
('ブリトニー', 3.4)
('ブリトニー', 2.58)
('ブリトニー', 8.78)
('ブリトニー', 34.19)
('ブリトニー', 4.5)
('リンゼイ', 32.02)
('リンゼイ', 9.16)
('リンゼイ', 17.62)
('リンゼイ', 0.0)
('リンゼイ', 2.34)
('リンゼイ', 3.71)
('リンゼイ', 16.23)
%