Top.Mail.Ru
Ответы

Суть сводных таблиц в базах данных в этом? Во времена Access эти внешние и первичные ключи было сложно понять...

Мозг был ими прокомпостирован изрядно... Хоть тут, в sqlite, правильное понимание пришло? Оказалось что вроде не так всё и сложно...

12345678910111213141516171819202122232425262728293031323334353637383940414243
 import sqlite3 as sql 
 
cities_ = [ 
    ('Кострома',), 
    ('Москва',), 
    ('Томск',) 
] 
 
persons_ = [ 
    ('2', 'Иван', 'Петров'), 
    ('1', 'Олег', 'Николаев'), 
    ('3', 'Василий', 'Васильев'), 
    ('2', 'Алена', 'Непомнящая'), 
    ('2', 'Николай', 'Серов'), 
    ('1', 'Юлия', 'Петрова'), 
] 
 
with sql.connect("test6.db") as con: 
    cur = con.cursor() 
 
    cur.execute("DROP TABLE IF EXISTS cities") 
    cur.execute("DROP TABLE IF EXISTS persons") 
 
    cur.execute("""CREATE TABLE IF NOT EXISTS cities (  
            id INTEGER PRIMARY KEY AUTOINCREMENT,        
            sty_name TEXT 
        )""") 
 
    cur.execute("""CREATE TABLE IF NOT EXISTS persons (  
                user_id INTEGER, 
                name TEXT,   
                surname TEXT         
            )""") 
 
    cur.executemany("INSERT INTO cities VALUES (NULL, ?)", cities_) 
    cur.executemany("INSERT INTO persons VALUES(?,?,?)", persons_) 
    cur.execute("""SELECT sty_name, name, surname 
     FROM cities JOIN persons ON 
     cities.id=persons.user_id ORDER BY sty_name""") 
    result = cur.fetchall() 
    for i in result: 
        print(*i) 
 

Кострома Олег Николаев
Кострома Юлия Петрова
Москва Иван Петров
Москва Алена Непомнящая
Москва Николай Серов
Томск Василий Васильев

По дате
По рейтингу
Аватар пользователя
Новичок
11мес

Сводная таблица - это вообще не из области баз данных и акцесса, а скорее, из экселя. В теории БД вместо сводных таблиц используется многомерный анализ, в практических реализациях - это OLAP и гиперкубы вместо таблиц в SQL Server, например, ну или просто временные таблицы/представления для простых случаев.

То, что в примере - это даже не сводная таблица, а просто связь между двумя таблицами в БД. "Сводную таблицу" (как вывод результата запроса) можно сделать например, на такой модели: есть таблица городов, таблица менеджеров в каждом городе (по нескольку штук) и есть таблица продаж, где написано, какой менеджер сколько чего продал. Вот если требуется аггрегирование общей суммы продаж по городам - то такой запрос и его результат в виде, скажем, временной таблицы или представления уже можно назвать "сводной таблицей", где данные берутся из разных таблиц.

Ну и во второй таблице, если user_id означает город, то логичнее его было бы назвать cities_id.