Gymterview
middle

Напишите запрос

Задача 1

Пример
CREATE TABLE table (
  id BIGINT(20) NOT NULL AUTO_INCREMENT,
  created TIMESTAMP NOT NULL DEFAULT 0,
  PRIMARY KEY (id)
);

Требуется написать запрос, который вернёт максимальное значение id и значение created для этого id:

Пример
SELECT id, created FROM table WHERE id = (SELECT MAX(id) FROM table);

Альтернативный вариант без подзапроса:

Пример
SELECT id, created FROM table ORDER BY id DESC LIMIT 1;

Задача 2

Пример
CREATE TABLE track_downloads (
  download_id BIGINT(20) NOT NULL AUTO_INCREMENT,
  track_id INT NOT NULL,
  user_id BIGINT(20) NOT NULL,
  download_time TIMESTAMP NOT NULL DEFAULT 0,
  PRIMARY KEY (download_id)
);

Написать SQL-запрос, возвращающий все пары (download_count, user_count), где user_count — общее ненулевое число пользователей, сделавших ровно download_count скачиваний 19 ноября 2010 года:

Пример
SELECT DISTINCT download_count, COUNT(*) AS user_count
FROM (
    SELECT COUNT(*) AS download_count
    FROM track_downloads
    WHERE download_time = '2010-11-19'
    GROUP BY user_id
) AS download_count
GROUP BY download_count;

Здесь внутренний подзапрос группирует скачивания по пользователям и считает количество скачиваний каждого. Внешний запрос группирует по количеству скачиваний и считает, сколько пользователей попало в каждую группу.