两种编号并排看
按价钱从高到低,两种编号各来一次。输出第 5、6、7 名的两种编号(组内用 : 连)。
goods supplier id name cat price stock sup_id id name city parent_id 1 绿茶 饮料 6 12 1 1 佳农 杭州 (空) 2 红茶 饮料 6 0 1 2 康泉 杭州 1 3 苏打水 饮料 5 (空) 2 3 文兴 苏州 (空) 4 薯片 零食 8 7 2 4 远丰 南京 3 5 海苔 零食 12 3 (空) 6 巧克力 零食 15 (空) 3 tag goods_tag 7 铅笔 文具 2 40 3 1 热销 1-1 1-2 8 笔记本 文具 9 5 3 2 新品 4-1 6-3 9 橡皮 文具 3 0 (空) 3 特价 7-1 8-3 10 冰红茶 饮料 4 20 1
import sqlite3
db = sqlite3.connect(":memory:")
db.executescript("""
CREATE TABLE supplier (id INTEGER PRIMARY KEY, name TEXT NOT NULL UNIQUE,
city TEXT NOT NULL, parent_id INTEGER);
CREATE TABLE goods (id INTEGER PRIMARY KEY, name TEXT NOT NULL UNIQUE,
cat TEXT NOT NULL, price INTEGER NOT NULL,
stock INTEGER, sup_id INTEGER);
CREATE TABLE tag (id INTEGER PRIMARY KEY, name TEXT NOT NULL UNIQUE);
CREATE TABLE goods_tag (goods_id INTEGER, tag_id INTEGER);
""")
db.executemany("INSERT INTO supplier VALUES (?,?,?,?)", [
(1, "佳农", "杭州", None), (2, "康泉", "杭州", 1),
(3, "文兴", "苏州", None), (4, "远丰", "南京", 3)])
db.executemany("INSERT INTO goods VALUES (?,?,?,?,?,?)", [
(1, "绿茶", "饮料", 6, 12, 1), (2, "红茶", "饮料", 6, 0, 1),
(3, "苏打水", "饮料", 5, None, 2), (4, "薯片", "零食", 8, 7, 2),
(5, "海苔", "零食", 12, 3, None), (6, "巧克力", "零食", 15, None, 3),
(7, "铅笔", "文具", 2, 40, 3), (8, "笔记本", "文具", 9, 5, 3),
(9, "橡皮", "文具", 3, 0, None), (10, "冰红茶", "饮料", 4, 20, 1)])
db.executemany("INSERT INTO tag VALUES (?,?)", [(1, "热销"), (2, "新品"), (3, "特价")])
db.executemany("INSERT INTO goods_tag VALUES (?,?)", [
(1, 1), (1, 2), (4, 1), (6, 3), (7, 1), (8, 3)])
rows = db.execute("SELECT RANK() OVER (ORDER BY price DESC) r, "
"ROW_NUMBER() OVER (ORDER BY price DESC, id) n "
"FROM goods ORDER BY n").fetchall()
print("/".join(str(x[0]) + ":" + str(x[1]) for x in rows[4:7]))
全部评论