Как получить среднее значение по нескольким таблицам - PullRequest
0 голосов
/ 01 апреля 2019

Я получил домашнее задание, чтобы получить средние теги пользователя в альбоме (user_id = x) в следующих таблицах:

>>> CREATE TABLE USERS (ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
                        NAME TEXT NOT NULL);

>>> CREATE TABLE ALBUMS (ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
                         NAME TEXT NOT NULL, CREATION_DATE TEXT NOT NULL, 
                         USER_ID INTEGER REFERENCES USERS(USER_ID) NOT NULL);

>>> CREATE TABLE PICTURES (ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
                           NAME TEXT NOT NULL,
                           LOCATION TEXT NOT NULL,
                           CREATION_DATE TEXT NOT NULL, 
                           ALBUM_ID INTEGER REFERENCES ALBUMS(ALBUM_ID) NOT NULL);

>>> CREATE TABLE TAGS (ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
                       PICTURE_ID INTEGER REFERENCES PICTURES(PICTURE_ID) NOT NULL,
                       USER_ID INTEGER REFERENCES USERS(USER_ID) NOT NULL);";

explenetion: каждый тег представляет собой строку в TAGS и имеетpicture_id, каждое изображение имеет album_id, а каждый альбом имеет user_id, в основном мне нужно подсчитать, сколько раз пользователь отмечен в каждом альбоме, и найти среднее время, когда пользователь отмечен в альбоме.

Я могу использовать это, используя только: SELECT ? FROM, AVG(), COUNT(), JOIN (INNER, LEFT, RIGHT, FULL JOIN), ON, IN, AND, OR, LIKE, , NOT, (=, != , >, <), IS, DISTINCT, ORDER BY(ASC/DESC), LIMT, OFFSET, and WHERE, что означает, что я не могу использовать GROUP BY

Я попробовал это

SELECT * FROM TAGS INNER JOIN PICTURES ON tags.picture_id = PICTURES.Id where album_id IN (select id from ALBUMS where user_id = x) AND user_id = x;

, но это дает мне только таблицу, которая имеет всетеги пользователя

Как я могу получить средние теги для альбома (user_id = x), это вообще возможно?

1 Ответ

1 голос
/ 02 апреля 2019

Сначала посчитайте, сколько раз пользователь отмечен в каждом альбоме, а затем получите среднее значение этих счетчиков:

select 
  avg(counter) averagetags
from (
  select count(t.user_id) counter
  from albums a 
  inner join pictures p on p.album_id = a.id
  inner join tags t on t.picture_id = p.id
  where t.user_id = ?
  group by a.id
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...