powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Количество подрядидущих значений
11 сообщений из 11, страница 1 из 1
Количество подрядидущих значений
    #38910293
S_Layer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!

делаю запрос
Код: sql
1.
2.
3.
SELECT one_id, two_id FROM some_base
GROUP BY one_id, two_id
ORDER BY one_id, two_id


получаю ответ вида:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
one_id, two_id
    1         3
    1         3
    1         4
    2         5
    2         5
    2         4
    2         4

как (походу новым запросом) мне получить кол-во повторяющихся подрядидущих элементов?
тоесть нужно что-то типа
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
one_id
    3
    4

two_id
    2
    1
    2
    2
значения в столбцах могут повторяться и ответ не должен, например, четверку посчитать как 3шт., а должен найти ее сначала 1 раз, а потом 2 раза.

заранее благодарен!
...
Рейтинг: 0 / 0
Количество подрядидущих значений
    #38910302
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну например
Код: sql
1.
2.
3.
SELECT one_id, COUNT(DISTINCT one_id, two_id)
FROM some_table
GROUP BY one_id
...
Рейтинг: 0 / 0
Количество подрядидущих значений
    #38910304
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, пардон, неверно интерпретировал задачу.
Тебе нужно просто
Код: sql
1.
2.
3.
SELECT one_id, COUNT(*)
FROM some_table
GROUP BY one_id;
...
Рейтинг: 0 / 0
Количество подрядидущих значений
    #38910327
S_Layer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
простите меня грешного, слишком уж упростил свой вопрос, из-за этого ответ получил конечно правильный, но (как в старом анекдоте) абсолютно бесполезный.
на самом деле все намного сложнее.
в базе таблица с пятью id'шниками
Код: sql
1.
select one_id, two_id, three_id, four_id, five_id from some_base group by one_id, two_id, three_id, four_id order by one_id, two_id, three_id, four_id


ответ будет что-то типа
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
one_id, two_id, three_id, four_id, five_id
    1        1           1           1        1
    1        2           2           1        2
    1        3           2           1        3
    2        1           1           1        4
    2        1           2           1        5
    2        1           2           1        6
    2        2           2           1        7
    2        2           2           1        8
    2        2           2           1        9

так вот, теперь нужно подсчитать повторы в каждом столбце. тоесть в one_id - 3 единицы и 6 двоек.
а запрос
Код: sql
1.
2.
3.
SELECT one_id, COUNT(*)
FROM some_table
GROUP BY one_id;

выдаст совсем не те результаты!
...
Рейтинг: 0 / 0
Количество подрядидущих значений
    #38910334
S_Layer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...а при условии, что в one_id присутствуют только 1 и 2, этот запрос выдаст всего 2 строки ответа. причем штук 200 единиц и штук 400 двоек))) (если в таблице 600 записей)
...
Рейтинг: 0 / 0
Количество подрядидущих значений
    #38910348
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S_Layer
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
one_id, two_id, three_id, four_id, five_id
    1        1           1           1        1
    1        2           2           1        2
    1        3           2           1        3
    2        1           1           1        4
    2        1           2           1        5
    2        1           2           1        6
    2        2           2           1        7
    2        2           2           1        8
    2        2           2           1        9

так вот, теперь нужно подсчитать повторы в каждом столбце. тоесть в one_id - 3 единицы и 6 двоек.
а запрос
Код: sql
1.
2.
3.
SELECT one_id, COUNT(*)
FROM some_table
GROUP BY one_id;

выдаст совсем не те результаты!
Запрос выдаст
one_id COUNT(*)1326
По-моему, результат ПРАВИЛЬНЫЙ.
Или ты хочешь одно, а объясняешь совсем другое.
...
Рейтинг: 0 / 0
Количество подрядидущих значений
    #38910389
S_Layer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да, вот в чем косяк недосказанности. действительно в данном случае оно работает.
при запросе всех имеющихся столбцов результат ответа (по количеству строк ответа) будет строго соответствовать количеству записей в таблице. в настоящий момент у меня их 85
НО...
простите за недомолвки, имеют место быть запросы, когда не все поля интересуют.
запрос типа
Код: sql
1.
2.
3.
SELECT one_id, two_id, four_id FROM some_base
GROUP BY one_id, two_id
ORDER BY one_id, two_id


(запрашиваем 1й столбец, 2ой и 4ый. группировка по последнему в запросе столбцу не требуется).
строк ответов получаем всего 11
после чего делаем запрос
Код: sql
1.
2.
3.
SELECT one_id, COUNT(*)
FROM some_table
GROUP BY one_id;


и получаем
one_idCOUNT(*)121264,а хотелось бы получить 4, 7
...
Рейтинг: 0 / 0
Количество подрядидущих значений
    #38910571
S_Layer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
всех сердечно благодарю!
гланды было решено вырвать программно, тобишь через **пу.
вся эта ботва теперь обрабатывается делфёй и знаете ли, пока меня устраивает то малое кол-во строк кода, которое на это понадобилось...

но если, все же, кто-то найдет решение этой задачи - буду премного признателен за экспу)
...
Рейтинг: 0 / 0
Количество подрядидущих значений
    #38910593
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S_Layerзапрос типа
Код: sql
1.
2.
3.
SELECT one_id, two_id, four_id FROM some_base
GROUP BY one_id, two_id
ORDER BY one_id, two_id



(запрашиваем 1й столбец, 2ой и 4ый. группировка по последнему в запросе столбцу не требуется).
строк ответов получаем всего 11
после чего делаем запрос
Код: sql
1.
2.
3.
SELECT one_id, COUNT(*)
FROM some_table
GROUP BY one_id;



и получаем
one_idCOUNT(*)121264,а хотелось бы получить 4, 7Что-то я не пойму, а если просто сделать
Код: sql
1.
2.
3.
SELECT one_id, COUNT(*)
FROM (вот тот запрос с двумя группируемыми полями) t0
GROUP BY one_id;

, не будет ли это тем, чего вы хотите?
...
Рейтинг: 0 / 0
Количество подрядидущих значений
    #38910598
S_Layer,

в исходной постановке вопроса не хватает, как минимум, поля, по которому следует упорядочивать данные именно в таком порядке, а не в каком-то другом.
...
Рейтинг: 0 / 0
Количество подрядидущих значений
    #38910602
S_Layer,

Запросом задача решалась бы элементрано, будь в MySQL аналитические (оконные) функции. Как минимум можно было решать методом начала групп + накопительный итог (функции lead(...)/lag(...) over(...), sum(...) over(order by ...) ), либо посредством инварианта группы (по разности двух разноконных row_number() over())

Но в MySQL этих прелестей пока нет, поэтому решения на SQL будет очень громоздким и врятли эффективным.
Проще на клиенте посчитать.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Количество подрядидущих значений
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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