@nailpaw

Как правильно составить Sql запрос для получения данных из двух таблиц?

Есть 2 таблицы:
users (id,name,date), дата рождения в формате unixtime
stat (id,id_user,id_stat)
Нужно составить запрос запрос, возвращающий имя и число статей пользователей в возрасте от 16 до 18 лет.

Получается, допустим Мише 16 лет у него 2 статьи, то вывод Миша 2
  • Вопрос задан
  • 75 просмотров
Пригласить эксперта
Ответы на вопрос 1
trapwalker
@trapwalker
Программист, энтузиаст
Если строго по условиям, то так:
SELECT
  u.name, (SELECT COUNT(*) FROM stat s WHERE s.id_user = u.id)
FROM users u
WHERE u.date BETWEEN :dt1 AND :dt2


Так вы посчитаете статьи только тех пользователей у которых они есть и удобно добавлять условия на сами статьи:
SELECT u.name, count(*)
FROM
  stat s
    JOIN users u ON u.id = s.id_user AND u.date BETWEEN :dt1 AND :dt2
GROUP BY u.id, u.name

Можно вывернуть наизнанку. Так получится вернуть и ноль статей для пользователей без статей. Как в первом запросе, но проагрегировать можно помимо количества статей, скажем, самое большое количество лайков (если бы у статьи было ещё число лайков). Или самую позднюю статью (если бы у статьи была дата публикации). Первый запрос на это не способен, вернее способен, но за счет либо доп затрат, либо ухищрений и не во всех диалектах.
SELECT u.name, count(*)
FROM
  users u  
    LEFT JOIN stat s ON s.id_user = u.id
WHERE u.date BETWEEN :dt1 AND :dt2
GROUP BY u.id, u.name
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы