Подсчитать общее количество лайков которые получили пользователи младше 10 лет
Перейти к содержимому

Подсчитать общее количество лайков которые получили пользователи младше 10 лет

  • автор:

Как посчитать количество пользователей, которое выводится по запросу, используя только sql?

Доброго дня! Есть задача посчитать количество пользователей, которым больше определенного количества лет. Таким запросом я вывожу всех пользователей, кому больше 20 лет:

SELECT *, (YEAR(current_date())-YEAR(date_of_birth)) as age FROM `user` HAVING age > '20' 

Вопрос: как посчитать количество пользователей, которое выводится по данному запросу не используя ничего, кроме sql? p.s. Пробовал разные варианты с count(), но так ничего и не вышло.

Отслеживать
11 1 1 золотой знак 2 2 серебряных знака 8 8 бронзовых знаков
задан 4 мар 2015 в 7:06
552 1 1 золотой знак 6 6 серебряных знаков 25 25 бронзовых знаков
@makbeth, в одном запросе — никак.
4 мар 2015 в 7:11

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

SELECT COUNT(*) as c FROM user WHERE date_of_birth < NOW() - INTERVAL 20 YEAR; 

Вот так будет выглядеть ваш запрос =)

Отслеживать
ответ дан 4 мар 2015 в 7:17
7,951 2 2 золотых знака 22 22 серебряных знака 35 35 бронзовых знаков

Ваш ответ тоже, безусловно, верен, но т.к. @A1essandro ответил быстрее и ближе к условию. Отдельное спасибо за INTERVAL. Буду юзать. =)

4 мар 2015 в 7:22

@makbeth, ответ тов. @ua6xh будет правильнее, т.к. если по date_of_birth построен индекс, то только здесь он будет задействован. Правда, я бы еще NOW() - INTERVAL 20 YEAR убрал и заменил значением, рассчитанным заранее. Тогда этот запрос имел бы все шансы на попадание в кэш.

Как вытащить посты где 'лайки > 10' (лайки в другом таблице, посты в другом)?

Доброго времени суток. Помогите новичку, как организовать это никак не могу понять.
Есть таблица _Likes, в нем 3 полей ("user_id","post_id"какой пользователь поставил@ лайк на какой пост и ID)b45da22ffbbc4402896e23dbdd6e4c92.jpg
и еще есть таблица _posts, в нем есть много чего и конечно же тот post_id
37035698a4624d989948694b5191c386.jpg

Хочу вытащить посты которые набрали больше 10 лайков. как мне это сделать ?
каким образом? php или sql запрос? покажите примеры пожалуйста укажите верный путь

  • Вопрос задан более трёх лет назад
  • 812 просмотров

1 комментарий

Оценить 1 комментарий

gromdron

А зачем у Вас 2 поля: ID и POST_ID . Они же одно и то же обозначают
Решения вопроса 2

я работаю с MS Sql server, а не с MySQL, так что синтаксис у вас может быть другой, но идея такая:
Сделайте группировку в таблице likes по post_id

select post_id, count(1) c from _likes group by post_id having count(1) > 10

вы получите post_id, у которых больше 10 лайков. Далее можете использовать это в качестве подзапроса.

Ответ написан более трёх лет назад
Нравится 1 3 комментария

jony7788

Jonny Mirzayev @jony7788 Автор вопроса

26e09138cbe3489383aaa5925a4b000e.jpg

Супер, как будет дальше? как теперь заставит запоминать эти post_id и вытащить их с '_Posts' ?

select * from _posts where post_id in (select post_id from _likes group by post_id having count(1) > 10)

jony7788

Jonny Mirzayev @jony7788 Автор вопроса
тоже сработало спасибо вам

Immortal_pony

Immortal_pony @Immortal_pony Куратор тега PHP

SELECT `_posts`.`post_id`, COUNT(`_Likes`.`id`) AS 'likes_quantity' FROM `_posts` JOIN `_Likes` ON (`_Likes`.`post_id`=`_posts`.`post_id`) GROUP BY `_posts`.`post_id` HAVING COUNT(`_Likes`.`id`) > 10

Ответ написан более трёх лет назад
Нравится 1 7 комментариев

SimBioT19

Да, намного лучше, чем
SELECT * FROM posts WHERE likes_count > 10

jony7788

Jonny Mirzayev @jony7788 Автор вопроса

6f4c6be952ee4eaea8db974ff1dc5490.jpg

не подошел это. выбранных постах нет столько классов

Immortal_pony

Immortal_pony @Immortal_pony Куратор тега PHP
SimBioT19, а теперь попробуйте учитывать только лайки, поставленные в октябре.

Immortal_pony

Immortal_pony @Immortal_pony Куратор тега PHP

выбранных постах нет столько классов

К сожалению, я не понял, что вы имеете ввиду. Пожалуйста, сформулируйте более подробно, чего вы ожидаете и чего нет.

Подозреваю, что вам необходимы все поля из таблицы "_posts". Для их получения вы можете изменить запрос следующим образом:

SELECT `_posts`.*, COUNT(`_Likes`.`id`) AS 'likes_quantity' FROM `_posts` JOIN `_Likes` ON (`_Likes`.`post_id`=`_posts`.`post_id`) GROUP BY `_posts`.`post_id` HAVING COUNT(`_Likes`.`id`) > 10

SimBioT19

Immortal_pony: я так и думал, что вы начнете мне вменять то, чего я не говорил. Разве я написал, что не нужно иметь таблицу Likes?? Я говорю о том, что нужно иметь поле Likes_count в таблице posts, чтобы всегда знать количество этих лайков и не пересчитывать их каждый раз, как вы делаете.

Immortal_pony

Immortal_pony @Immortal_pony Куратор тега PHP

SimBioT19, я еще раз повторяю, что задумывать об агрегировании данных стоит тогда, когда встает соответствующая задача. Добавление в систему лишних полей и усложнение логики дложно быть обосновано.

jony7788

Jonny Mirzayev @jony7788 Автор вопроса

выбранных постах нет столько классов

Пожалуйста, сформулируйте более подробно

4e11339135b741ba97a388ec22b4d263.jpg

Сделал так

SELECT `Wo_Posts` . * , COUNT( `Wo_Likes`.`id` ) AS 'likes_quantity' FROM `Wo_Posts` JOIN `Wo_Likes` ON ( `Wo_Likes`.`post_id` = `Wo_Posts`.`id` ) GROUP BY `Wo_Posts`.`post_id` HAVING COUNT( `Wo_Likes`.`id` ) >7 ORDER BY `likes_quantity` DESC

JOIN `Wo_Likes` ON ( `Wo_Likes`.`post_id` = `Wo_Posts`.`id` ) в этом строке изменил Wo_Posts`.`post_id' на id и все супер
Просто класс Спасибо вам большое

Ответы на вопрос 1

SimBioT19

Вы подошли к этому вопросу не с той стороны.
Вам нужно иметь счётчик лайков в таблице post и прибавлять к нему 1, когда пользователь ставит лайк.
Тогда и посты с лайками > N будет получить легче легкого.

Ответ написан более трёх лет назад
Нравится 1 7 комментариев

Immortal_pony

Immortal_pony @Immortal_pony Куратор тега PHP

Это вы подошли к вопросу не с той стороны.
Пожалуйста, никогда не давайте новчикам такие ужасные советы.

SimBioT19

Immortal_pony: вы наверное всегда все записи считаете, да? Это же самый эффективный способ, верно?
Особенно всё будет круто, когда лайков в таблице несколько миллионов и тысячи постов.

Immortal_pony

Immortal_pony @Immortal_pony Куратор тега PHP

SimBioT19, агрегация - отдельный вопрос и заниматься этим стоит, когда встает соответствующая задача.

SimBioT19

Immortal_pony: хотите сказать, что у ответов на тостере нет счётчика, какой я предложил? И для каждого ответа считает количество лайкнувших? Вы просто пустослов

Immortal_pony

Immortal_pony @Immortal_pony Куратор тега PHP

SimBioT19, у меня нет сведений об архихектуре Тостера. Могу лишь отметить, что без агрегации сайт, подобный Тостеру, будет прекрасно работать.
Пытаясь записать сразу агрегированные данные вы мыслите крайне узколобо, не предполагая, что эти данные могут понадобиться в другом месте. Простейший вариант - для каких-то статистических отчетов. Даже в варианте, предложенном автором можно увидеть, что лайк относится в равной мере как к сущности "пост", так и сущности "пользователь". Соответственно, можно ожидать, что где-то в системе нам необходимо будет подсчитать, ну скажем, общее количество лайков пользователя. Или общее количество постов пользователя, которые были лайкнуты. Соответственно, при вашей архитектуре нам необходимо будет держать все эти данные отдельно.
Однако, не будем останавливаться. Как правило "лайк" - не такая простая сущность, как у автора, у нее могут быть и другие свойства. Например, дата. После добавления данного столбца даже мне сходу приходит в голову несколько вариантов отчетов, а у уж что может понадобиться маркетологам для анализа. Так вот, чтобы данные были в каждом отчете, вам необходимо будет каждый раз серьезно дорабатывать систему. И, конечно, при вашем подходе, данные за предыдущий период всегда будут недоступны.

Пожалуйста, прекратите выпячивать свое невежество и попробуйте подумать, прежде чем писать ответ.

SimBioT19

Immortal_pony: я лишь предлагаю хранить общее количество лайков, чтобы было легко сортировать посты. При этом я ничего не говорил о том, что не требуются связывающие таблицы для "статистических данных".

Для вас разъясню:
Когда пользователь нажимает лайк мы прибавляем в таблице Post к полю likes_quantity + 1 И добавляем запись о лайке куда вашей душе угодно. В любую статистику.

Вы же продолжаете утверждать, что ваш запрос ниже удобней, чем уже упомянутый мной
SELECT * FROM posts WHERE likes_quantity > 10

Immortal_pony

Immortal_pony @Immortal_pony Куратор тега PHP

SimBioT19, да, я понял, что вы хотите агрегировать данные сразу. Я лишь прошу объяснить, зачем в систему добавлять дополнительные колонки и логику, когда в этом нет никакой необходимости?

Вы же продолжаете утверждать, что ваш запрос ниже удобней,

Что вы подразумеваете под "удобством"? Функциональность одинакова, только мой запрос не требует доработок системы.

Вопрос по sql

Привет всем не так давно начал изучать sql.
Есть задание
1)Пусть задан некоторый пользователь. Из всех пользователей соц. сети найдите человека, который больше всех общался с выбранным пользователем (написал ему сообщений).
2)Подсчитать общее количество лайков, которые получили пользователи младше 10 лет
Спасибо то, что подскажите нужно объединить 2 таблицы likes and profiles не как не пойму

Ссылка скрыта от гостей

Sha rik
New member

27.11.2020 1 0 BIT 0

Привет всем не так давно начал изучать sql.
Есть задание
1)Пусть задан некоторый пользователь. Из всех пользователей соц. сети найдите человека, который больше всех общался с выбранным пользователем (написал ему сообщений).
2)Подсчитать общее количество лайков, которые получили пользователи младше 10 лет
Спасибо то, что подскажите нужно объединить 2 таблицы likes and profiles не как не пойму

Задача MySQL. Найдите общее количество лайков, которые получили пользователи женского пола

База данных содержит сущности:
users – пользователи;
messages – сообщения;
friend_requests – заявки на дружбу;
communities – сообщества;
users_communities – пользователи сообществ;
media_types – типы медиа;
media – медиа;
likes – лайки;
profiles – профили пользователя.

У сущности «пользователи» имеются следующие поля(атрибуты):
id – идентификатор;
firstname – имя;
lastname - фамилия;
email - адрес электронной почты.

У сущности «профиль пользователя» имеются следующие поля(атрибуты):
user_id – идентификатор;
gender – пол;
birthday - дата рождения;
photo_id - аватарка;
hometown - город.

Атрибут «пол» сущности «профиль пользователя» может принимать следующие значения:
'f' - женский;
'm' - мужской.

У сущности «лайки» имеются следующие поля(атрибуты): id – идентификатор;
user_id – пользователь, который поставил лайк;
media_id - медиа, который лайкнули.

У сущности «медиа» имеются следующие поля(атрибуты):
id – идентификатор;
user_id – пользователь – владелец медиа;
body - содержимое;
filename – ссылка на файл;
created_at - дата создания;
updated_at - дата последнего обновления.

Найдите общее количество лайков, которые получили пользователи женского пола.

  • Подсказка № 1
  • Подсказка № 2

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *