powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / SELECT COUNT, help
23 сообщений из 23, страница 1 из 1
SELECT COUNT, help
    #38623505
sce
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть таблица с одной колонкой. Мне нужно посчитать сколько раз встречается 'новость1','новость2' и т.д одним запросом.

------------
| id_news |
------------
| Новость1 |
| Новость2 |
| Новость1 |
| Новость3 |
| Новость5 |
| Новость6 |
| Новость1 |
------------

Вот мой пример:
Код: plsql
1.
SELECT COUNT(id_news) AS Count, id_news FROM rt_likes WHERE id_news IN ('новость1','новость2') group by id_news



Это работает.

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


А нужно чтобы например если заправшиваю новость300 (ее нет допустим в таблице) то мне выводилось:

--------------------
| Новость3000 | 0 |
--------------------
...
Рейтинг: 0 / 0
SELECT COUNT, help
    #38623523
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://sqlfiddle.com/#!2/1de58e/1
Код: sql
1.
2.
create table myTable (text varchar(100));
insert myTable values('news1'),('news2'),('news2'),('news1'),('news3'),('news1'),('news1'),('news5');

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select n.txt, count(t.text)qty
from(
  select 'news1' txt union all
  select 'news2' txt union all
  select 'news3' txt union all
  select 'news4' txt union all
  select 'news5' txt union all
  select 'news6' txt union all
  select 'news7' txt
  ) n
left join myTable t on t.text=n.txt
group by n.txt;
...
Рейтинг: 0 / 0
SELECT COUNT, help
    #38623536
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cygapb-007 http://sqlfiddle.com/#!2/1de58e/1
Код: sql
1.
2.
create table myTable (text varchar(100));
insert myTable values('news1'),('news2'),('news2'),('news1'),('news3'),('news1'),('news1'),('news5');

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select n.txt, count(t.text)qty
from(
  select 'news1' txt union all
  select 'news2' txt union all
  select 'news3' txt union all
  select 'news4' txt union all
  select 'news5' txt union all
  select 'news6' txt union all
  select 'news7' txt
  ) n
left join myTable t on t.text=n.txt
group by n.txt;



оставтес при себе свои джоины :)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select  id_news, count( id_news)-1 from
(
select  id_news, id_news from news UNION ALL
select 'news1','news1' UNION ALL
select 'news1','news1' UNION ALL
select 'news1','news1' UNION ALL

)
...
Рейтинг: 0 / 0
SELECT COUNT, help
    #38623538
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cygapb-007 http://sqlfiddle.com/#!2/1de58e/1
Код: sql
1.
2.
create table myTable (text varchar(100));
insert myTable values('news1'),('news2'),('news2'),('news1'),('news3'),('news1'),('news1'),('news5');

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select n.txt, count(t.text)qty
from(
  select 'news1' txt union all
  select 'news2' txt union all
  select 'news3' txt union all
  select 'news4' txt union all
  select 'news5' txt union all
  select 'news6' txt union all
  select 'news7' txt
  ) n
left join myTable t on t.text=n.txt
group by n.txt;



оставтес при себе свои джоины :)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select  id_news, count( id_news)-1 from
(
select  id_news, id_news from news UNION ALL
select 'news1','news1' UNION ALL
select 'news2','news2' UNION ALL
select 'news3','news3' UNION ALL
.....

)
group by id_news
...
Рейтинг: 0 / 0
SELECT COUNT, help
    #38623542
sce
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cygapb-007,

большое спасибо работает, но есть вопрос. А если таблица состоит не из одной колонок а из двух?

-------------------------
| id_news | id_user |
-------------------------
| Новость1 | user2 |
| Новость2 | user3 |
| Новость1 | user1 |
| Новость3 | user5 |
| Новость5 | user1 |
| Новость6 | user2 |
| Новость1 | user7 |
-------------------------

как сделать выборку?
...
Рейтинг: 0 / 0
SELECT COUNT, help
    #38623566
sce
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex564657498765453оставтес при себе свои джоины :)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select  id_news, count( id_news)-1 from
(
select  id_news, id_news from news UNION ALL
select 'news1','news1' UNION ALL
select 'news2','news2' UNION ALL
select 'news3','news3' UNION ALL
.....

)
group by id_news




Чего то ругается:

Код: plsql
1.
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') group by id_news' at line 7
...
Рейтинг: 0 / 0
SELECT COUNT, help
    #38623607
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sce,

подозреваю, что вы лишний UNION ALL скопировали.
...
Рейтинг: 0 / 0
SELECT COUNT, help
    #38623656
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scealex564657498765453оставтес при себе свои джоины :)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select  id_news, count( id_news)-1 from
(
select  id_news, id_news from news UNION ALL
select 'news1','news1' UNION ALL
select 'news2','news2' UNION ALL
select 'news3','news3' UNION ALL
.....

)
group by id_news




Чего то ругается:

Код: plsql
1.
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') group by id_news' at line 7



ещо, для from (select ...) -!!! обязательным есть псевдоним. получишь эту ошибку когда юнион олл лишний уберёшь.

Код: sql
1.
2.
3.
4.
select ... from

(select union solect union... ) 'psevdonim'
group by...
...
Рейтинг: 0 / 0
SELECT COUNT, help
    #38623699
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex564657498765453оставтес при себе свои джоины :)Нуте-ка поподробней про подсчет только нужных новостей, а не всех что в базе?
...
Рейтинг: 0 / 0
SELECT COUNT, help
    #38623709
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sceCygapb-007,

большое спасибо работает, но есть вопрос. А если таблица состоит не из одной колонок а из двух?

-------------------------
| id_news | id_user |
-------------------------
| Новость1 | user2 |
| Новость2 | user3 |
| Новость1 | user1 |
| Новость3 | user5 |
| Новость5 | user1 |
| Новость6 | user2 |
| Новость1 | user7 |
-------------------------

как сделать выборку?А что должно быть в результате?
...
Рейтинг: 0 / 0
SELECT COUNT, help
    #38623723
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex564657498765453
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select  id_news, count( id_news)-1 from
(
select  id_news, id_news from news UNION ALL
select 'news1','news1' UNION ALL
select 'news2','news2' UNION ALL
select 'news3','news3' UNION ALL
.....

)
group by id_news

Почему такой минимализм? Решительнее надо подходить к решению решаемой задачи!
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select  id_news, count( id_news)-1 from
(
select  id_news, id_news, id_news, id_news, id_news, id_news, id_news from news UNION ALL
select 'news1','news1','news1','news1','news1','news1','news1' UNION ALL
select 'news2','news2','news2','news2','news2','news2','news2' UNION ALL
select 'news3','news3','news3','news3','news3','news3','news3'
)
group by id_news,id_news,id_news,id_news,id_news,id_news
...
Рейтинг: 0 / 0
SELECT COUNT, help
    #38623726
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PS. у FROM не указан алиас
...
Рейтинг: 0 / 0
SELECT COUNT, help
    #38623752
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cygapb-007,

я писал про алиас...

сударь, извольте признать что ваше решение правилное, моё ещо и красивое :)

ЗЫ
как то раз задача была, и по быстрому я решил как и ты, а счас глянул со стороны ...вот сразу идея родилась :) внатуре со стороны порой виднее :) а я вот про алиас сразу не заметил...
...
Рейтинг: 0 / 0
SELECT COUNT, help
    #38623768
sce
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cygapb-007,

есть на входе массив новостей и user id

нужно получить следующее

id_news | count | user
--------------------------
news1 | 4 | true
news4 | 7 | false
news2 | 8 | true

и так далее

true или false это есть ли в таблице запись news1 | vasya

если нет нужной новости в базе то должно выдаваться

news100 | 0 | false

спасибо
...
Рейтинг: 0 / 0
SELECT COUNT, help
    #38623800
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sceесли нет нужной новости в базе Кто определяет/задает "нужность" новости?

В предположении, что нужны новости news001, news250, news130 и news004:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select 
  n.txt, 
  count(t.text)qty, 
  ifnull(max(t.id_user='vasya'),0) as `user`
from(
  select 'news001' txt union all
  select 'news250' union all
  select 'news130' union all
  select 'news004' 
  ) n
left join myTable t on t.text=n.txt
group by n.txt;
...
Рейтинг: 0 / 0
SELECT COUNT, help
    #38623806
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex564657498765453сударь, извольте признать что ваше решение правилное, моё ещо и красивое :)На красавицу Ягу наглядеться не могу

Если "причесать" ваше решение, то "внезапно" выяснится, что список отбираемых новостей нужно задавать 2 раза: первый в where text in (<список>), и второй - в юнионах. Поэтому особо красивым его не назвал бы.

А так да, вполне допустимо.

PS. За грамотность - отдельный респект
...
Рейтинг: 0 / 0
SELECT COUNT, help
    #38623833
sce
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cygapb-007sceесли нет нужной новости в базе Кто определяет/задает "нужность" новости?

В предположении, что нужны новости news001, news250, news130 и news004:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select 
  n.txt, 
  count(t.text)qty, 
  ifnull(max(t.id_user='vasya'),0) as `user`
from(
  select 'news001' txt union all
  select 'news250' union all
  select 'news130' union all
  select 'news004' 
  ) n
left join myTable t on t.text=n.txt
group by n.txt;



Список новостей какие нужны я буду задавать сам, в джава коде. Что то вроде такого:

Код: java
1.
2.
3.
4.
String s;
for (int i = 0; i < id_news.size(); i++){
   s = s + "select '" + id_news.get(i) + "' union all";
}
...
Рейтинг: 0 / 0
SELECT COUNT, help
    #38624551
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cygapb-007alex564657498765453сударь, извольте признать что ваше решение правилное, моё ещо и красивое :)На красавицу Ягу наглядеться не могу

Если "причесать" ваше решение, то "внезапно" выяснится, что список отбираемых новостей нужно задавать 2 раза: первый в where text in (<список>), и второй - в юнионах. Поэтому особо красивым его не назвал бы.

А так да, вполне допустимо.

PS. За грамотность - отдельный респект

у меня нету секции IN :)

а вообще я про алгоритм вычисления.

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

ЗЫ - по русскому всегда ставили 3, дабы не ставить 2, ибо был олимпиадником по физике химии математике и информатике. чем богаты тем и рады. :)
...
Рейтинг: 0 / 0
SELECT COUNT, help
    #38624626
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex564657498765453у меня нету секции IN :)
Научитесь, что ли, решать поставленную , а не абстрактную задачу
...
Рейтинг: 0 / 0
SELECT COUNT, help
    #38624775
sce
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cygapb-007, спасибо все работает, но есть проблема, если мне нужно получать не несколько id_news, а только одну.
Получается ошибка, выдает как будто бы есть 2 записи, хотя в таблице только 1
...
Рейтинг: 0 / 0
SELECT COUNT, help
    #38624836
sce
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разобрался, все ок:)
...
Рейтинг: 0 / 0
SELECT COUNT, help
    #38625018
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sceесть проблема, если мне нужно получать не несколько id_news, а только одну.
Получается ошибка, выдает как будто бы есть 2 записи, хотя в таблице только 1Может, оформить запрос немного по-другому?
Код: sql
1.
2.
3.
4.
5.
from(select 'news001' txt 
 union all select 'news250' 
 union all select 'news130' 
 -- union all select 'news004' 
) n


Вообще-то жаль, что нет возможности писать просто, как в MS SQL:
Код: sql
1.
2.
3.
from(values
  ('news001'),('news250'),('news130') -- ,('news004')
  ) n(txt)
...
Рейтинг: 0 / 0
SELECT COUNT, help
    #38625654
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex564657498765453сударь, извольте признать что ваше решение правилное, моё ещо и красивое
Может, и красивое. Но неправильное. Идеологически. И хреновосопровождаемое.

sceНо как сделать когда в колонке нет нужной мне новости, сейчас просто не выводится если нет запрашиваемой новости в таблице
Сервер может отдавать только те данные, которые у него есть. Судя по этому вопросу - где-то имеется таблица всех новостей. Вот её и нужно использовать в запросе.
А список конкретных новостей из всего набора может уже включаться в соотв. выражение секции отбора.
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / SELECT COUNT, help
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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