|
|
|
Выборка с группировкой (хитрая)
|
|||
|---|---|---|---|
|
#18+
Доброго дня коллеги, я свою голову уже сломал, может кто подкинет умную мыслю... Есть таблица: tbl a | b | c ---------- 1 1 1 2 2 2 3 3 3 1 4 4 5 1 5 Нужно сгруппировать по всем полям так, чтоб результатом select *, count(*) group by ..... было: a | b | c | count(*) ---------- 1 1 1 3 2 2 2 1 3 3 3 1 Пробовал group by (a and b and c) group by (a or b or c) group by a, b, c Результат не тот :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2015, 01:36:15 |
|
||
|
Выборка с группировкой (хитрая)
|
|||
|---|---|---|---|
|
#18+
Artem07 Код: sql 1. 2. 3. 4. 5. что обозначает эта тройка ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2015, 01:52:55 |
|
||
|
Выборка с группировкой (хитрая)
|
|||
|---|---|---|---|
|
#18+
В эту тройку входит строка 4, т.к. столбец а совпадает с первой строкой и строка 5, т.к. столбец b совпадает с первой строкой Нашел следующее решение через вложенные запросы: Код: sql 1. 2. 3. 4. 5. но подозреваю что можно гораздо проще сделать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2015, 02:07:24 |
|
||
|
Выборка с группировкой (хитрая)
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2015, 10:06:01 |
|
||
|
Выборка с группировкой (хитрая)
|
|||
|---|---|---|---|
|
#18+
Даже проще, раз выбираются только строки с a=b=c Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2015, 10:11:38 |
|
||
|
Выборка с группировкой (хитрая)
|
|||
|---|---|---|---|
|
#18+
Да, еще подумал и решил что нужно знать какие значения сгруппированы GROUP_CONCAT(cel separate ',') Код: sql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2015, 10:33:30 |
|
||
|
Выборка с группировкой (хитрая)
|
|||
|---|---|---|---|
|
#18+
Сори, сам уже запутался что должно получиться в итоге, при исходных данных Код: sql 1. 2. 3. 4. 5. 6. 7. Результат Код: sql 1. 2. 3. 4. 5. А при Код: sql 1. 2. 3. 4. 5. 6. Результат Код: sql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2015, 11:10:37 |
|
||
|
Выборка с группировкой (хитрая)
|
|||
|---|---|---|---|
|
#18+
так же можно, корр.подзапросами сделать, но "тяжёлый" запрос будет как-то так (не проверял) Код: sql 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2015, 12:17:09 |
|
||
|
Выборка с группировкой (хитрая)
|
|||
|---|---|---|---|
|
#18+
COUNT,, Да в том то и дело, данных много, да и критериев не 3 а 5. так что вложенность и IN крайне не желательно использовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2015, 14:22:32 |
|
||
|
Выборка с группировкой (хитрая)
|
|||
|---|---|---|---|
|
#18+
Artem07COUNT,, Да в том то и дело, данных много, да и критериев не 3 а 5. так что вложенность и IN крайне не желательно использовать. таа, это не тот случай и не тот IN, когда за него нужно сильно волноватся. Тут бы "помог" ms sql-ный cross apply, но в MySQL такого нет Разве что, "склеить" результат кор.запроса, через какой-нибудь разделитель, в одно поле, и потом "разбивать" его во внешнем запросе, или на клиенте Код: sql 1. 2. 3. 4. пс даа, и если вы ещё не поняли, ваш запрос отсюда - 17412891 - "ниачём" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2015, 15:11:55 |
|
||
|
Выборка с группировкой (хитрая)
|
|||
|---|---|---|---|
|
#18+
COUNT,, Прошу прощения, ввел в заблуждения постановкой задачи, поля a,b,c не обязаны быть одинаковыми, т.е. правильная постановка вопроса: Дано: Код: sql 1. 2. 3. 4. 5. 6. 7. Результат: Код: sql 1. 2. 3. 4. 5. Дано: Код: sql 1. 2. 3. 4. 5. 6. Результат: Код: sql 1. 2. 3. 4. 5. Вот, теперь правильно, итого, если хоть одно поле нескольких строк совпадает, то эти строки группируются! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2015, 00:48:32 |
|
||
|
Выборка с группировкой (хитрая)
|
|||
|---|---|---|---|
|
#18+
Artem07, Пока добился такого результата, если совпадение по одному полю, то все ок (на пример вариант с 4 строками), Код: sql 1. 2. 3. 4. 5. А вот если по разным (вариант 5 строк), то записи повторяются Код: sql 1. 2. 3. 4. 5. 6. 7. т.е. по сути строка 1 включает в себя информацию из строк 4 и 5 Вот мой не хитрый запрос: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. Подскажите, как избавиться от лишних строк? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2015, 11:23:33 |
|
||
|
Выборка с группировкой (хитрая)
|
|||
|---|---|---|---|
|
#18+
Artem07Вот, теперь правильно, итого, если хоть одно поле нескольких строк совпадает, то эти строки группируются!Хмм.. я правильно понимаю, что вы хотите такое: Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2015, 11:36:52 |
|
||
|
Выборка с группировкой (хитрая)
|
|||
|---|---|---|---|
|
#18+
Про сворачивание групп я не написал, но сначала бы разобраться со способом группирования... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2015, 11:37:53 |
|
||
|
Выборка с группировкой (хитрая)
|
|||
|---|---|---|---|
|
#18+
tanglir, tanglirArtem07Вот, теперь правильно, итого, если хоть одно поле нескольких строк совпадает, то эти строки группируются!Хмм.. я правильно понимаю, что вы хотите такое: Код: plaintext 1. 2. 3. 4. 5. Да, совершенно верно! Даже можно так: -в группу N входят: --первая запись --все записи, где ЛЮБОЙ столбец совпадает таким-же столбцом записи из уже накопившихся в группе -группа N сформирована ....... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2015, 14:13:54 |
|
||
|
Выборка с группировкой (хитрая)
|
|||
|---|---|---|---|
|
#18+
по-моему, такое только циклами в хранимке можно сделать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2015, 19:49:12 |
|
||
|
Выборка с группировкой (хитрая)
|
|||
|---|---|---|---|
|
#18+
Artem07... Вот, теперь правильно, итого, если хоть одно поле нескольких строк совпадает, то эти строки группируются! Типы полей какие ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2015, 00:05:05 |
|
||
|
Выборка с группировкой (хитрая)
|
|||
|---|---|---|---|
|
#18+
скукотищаArtem07... Вот, теперь правильно, итого, если хоть одно поле нескольких строк совпадает, то эти строки группируются! Типы полей какие ? varchar 20, int 10 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2015, 08:02:38 |
|
||
|
Выборка с группировкой (хитрая)
|
|||
|---|---|---|---|
|
#18+
скукотищаArtem07... Вот, теперь правильно, итого, если хоть одно поле нескольких строк совпадает, то эти строки группируются! Типы полей какие ? Если это поможет, то можно все к int привести ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2015, 08:23:41 |
|
||
|
Выборка с группировкой (хитрая)
|
|||
|---|---|---|---|
|
#18+
tanglir, Ну почему только "циклами и в ХП"? Думаю можно сваять что-то нетривиальное на переменных... но лениво. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2015, 11:03:07 |
|
||
|
Выборка с группировкой (хитрая)
|
|||
|---|---|---|---|
|
#18+
Arhat109, а если потом использовать джоин он a NOT IN (a).... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2015, 11:25:13 |
|
||
|
Выборка с группировкой (хитрая)
|
|||
|---|---|---|---|
|
#18+
Arhat109tanglir, Ну почему только "циклами и в ХП"? Думаю можно сваять что-то нетривиальное на переменных... но лениво. :) Не сочтите за труд хоть намекнуть :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2015, 18:07:40 |
|
||
|
Выборка с группировкой (хитрая)
|
|||
|---|---|---|---|
|
#18+
Artem07, Отталкивался от этой постановки задачи: автор-в группу N входят: --первая запись --все записи, где первый столбец совпадает с первым столбцом начальной записи --все записи, где второй столбец совпадает со вторым столбцом начальной записи (или с любым из уже накопившихся в группе? из примеров неясно) -группа N сформирована -убираем все записи группы N из общего набора и начинаем формировать группу (N+1)... Так? Отсюда: 1. "Родонасяльником группы" могут быть только записи с не повторяющимися комбинациями значений. Ну или "заданное" начало. Это самый внутренний подзапрос отлавливающий все "N". 2. К каждой записи отсюда джойним все те, которые совпадают по первому ключу, по второму и т.д. Собственно на этом этапе даже "мудрить не надо" составное условие для ON на совпадении первого ключа ИЛИ второго ИЛИ третьего. После чего группируем всё это барахло по составному интегральному ключу из всех трех и ву-а-ля считаем ваш COUNT(). Тут даже на переменных нечего делать. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2015, 19:33:06 |
|
||
|
Выборка с группировкой (хитрая)
|
|||
|---|---|---|---|
|
#18+
Arhat109Тут даже на переменных нечего делать. :) Artem07--все записи, где ЛЮБОЙ столбец совпадает таким-же столбцом записи из уже накопившихся в группеЯ это понимаю так, что на таких дынных #abc1123214567345245644513575456и при условии, что начинаем мы от строки №1, в первой группе будут строки 1,2,3, 4 . Четвёртая попадёт на второй итерации наполнения первой группы (по совпадению первого столбца с уже накопившейся строкой №3). Ваш вариант тут не подходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2015, 05:00:29 |
|
||
|
Выборка с группировкой (хитрая)
|
|||
|---|---|---|---|
|
#18+
tanglir, Да, сначала надо уточнить ТЗ: совпадение требуется только с первым в группе или с любым накопившимся? Второй вариант, с высокой долей вероятности вытащит всю таблицу, ну и/или будет сильно зависеть от порядка накопления в группе. :) Последнее - ваще не РА и только на переменных ... и будет зависеть от порядка выборки записей из БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2015, 09:28:31 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38911934&tid=1833377]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 206ms |
| total: | 354ms |

| 0 / 0 |
