Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите с sql запросом / 8 сообщений из 8, страница 1 из 1
08.10.2015, 09:30:31
    #39071510
araman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с sql запросом
Ребят, думаю, что запрос простой, но что то не идет, подсобите плиз.
Вопщем структура такая(я выбросил все ненужные поля такие как news_text)
Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE `news` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  `created_at` datetime NOT NULL,
  `author_id` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8



Выбираем сколько авторов опубликовали новости с группировкой по дате:
Код: sql
1.
2.
3.
4.
5.
6.
select 
    date(created_at), count(distinct author_id)
from
    news
group by date(created_at)
order by date(created_at) desc



Ребят а как составить запрос, чтобы выводило кол-во авторов, которые опубликовали только 1 новость(с группировкой по дате)?

Скажем если пользователь Вася опубликовал за сегодня уже 2 новости, а пользователь Петя только одну, то учитываем ТОЛЬКО Петю. А в другой колонке вывести наоборот Васю, который написал 2 и более новостей.

Понимаю, что нужно наверно как то добавлять подзапрос. Но не получается вот что. Если в подзапросе я группирую по author_id то как скрестить с датой?

У меня должна получится таблица вида:
created_at | count_one_post_author | count_more_post_author

Натолкните плиз, чот никак не могу допедрить.
...
Рейтинг: 0 / 0
08.10.2015, 09:42:22
    #39071534
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с sql запросом
Код: sql
1.
HAVING COUNT(author_id)=1
...
Рейтинг: 0 / 0
08.10.2015, 09:45:20
    #39071537
araman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с sql запросом
А как добавить вторую колонку? Ведь я же не смогу в одном запросе сделать 2 хевинга.
...
Рейтинг: 0 / 0
08.10.2015, 09:50:37
    #39071545
araman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с sql запросом
Akina вы наверно немножко неверно поняли задачу. Юзеров может быть 180 человек, которые опубликовали за сегодня только 1 новость, и 540 которые 2 и более. Хевинг тут наверно не очень поможет, он же просто по агрегатной функции сделает фильтр, а count никак не покажет 1.
...
Рейтинг: 0 / 0
08.10.2015, 10:20:01
    #39071597
Помогите с sql запросом
araman,

во вложенном запросе делаешь group by + having, чтобы выбрать авторов с одним постом, во внешнем запросе считаешь кол-во выбранных записей.
как вариант - [not] exists -подзапрос в WHERE для идентификации однопостовых юзеров с последующим count-ом без group by
...
Рейтинг: 0 / 0
08.10.2015, 10:21:27
    #39071599
Помогите с sql запросом
Добрый Э - Эх,

а ещё, некоторые СУБД поддерживают вложенные агрегаты. умеет ли с ними работать MySQL - проверить лень.
...
Рейтинг: 0 / 0
08.10.2015, 10:35:38
    #39071626
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с sql запросом
Код: sql
1.
2.
3.
4.
5.
6.
SELECT created_date, SUM(cnt=1), SUM(cnt>1)
FROM
  (SELECT date(created_at) created_date, COUNT(*) cnt
   FROM news
   GROUP BY created_date, author_id) t
GROUP BY created_date DESC
...
Рейтинг: 0 / 0
08.10.2015, 10:43:04
    #39071635
araman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с sql запросом
miksoft спасибо, все чотко!

Блин как же все просто оказалось)) Ребят, и последний вопрос, если данных свыше 100к то почему то жестко тормозит сортировка по дате. С чем может быть связано? Если не указывать сортировку то более менее быстро работает все.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите с sql запросом / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]