Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Вопрос по Count  [new]
ur3om
Member

Откуда:
Сообщений: 16
MSSQL 2012 Enterprise

Одна таблица состоит из одного столбца, в столбце текстовые значения, число строк около 100млн.
Строки предварительно вычещены от мусора в виде пробелов:

update TABLE set [COLUMN] = ltrim(rtrim([COLUMN]))

И от мусора в виде пустых строк:

elete from TABLE where ltrim(rtrim([COLUMN]))='' or [COLUMN] is null

таблица получается 98 млн строк.

но при попытке подсчитать число повторов запросом

select COUNT(*), [COLUMN] from [TABLE] group by [COLUMN]

или таким

insert into [TABLE] select COUNT(*), [COLUMN] from [TABLE] group by [COLUMN]

число обработанных строк составляет только 50 млн - почти на половину меньше
при этом при запросе insert into часть строк сдвигается во второй столбец, с выводом результата в первый а часть остается на месте без явной закономерности привязки к содержимому

запрос SELECT TOP 100 000 000 выдает все строки

Формат строк VARCHAR (750)

В чем может быть проблема?

Вообще - задача стоит в том что бы в таблице появился второй столбец в котором отражалось число повторов текста из столбца 1, а затем в столбце 1 удалить все дубликаты, но оставив число повторов (до удаления дубликатов) в столбце 2

Спасибо за помощь нубу.
24 авг 16, 21:45    [19586675]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Count  [new]
ur3om
Member

Откуда:
Сообщений: 16
При внимательном просмотре в столбце нашлись ТАБы в начале части строк, как избавиться от них?
24 авг 16, 22:04    [19586752]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Count  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
ur3om
При внимательном просмотре в столбце нашлись ТАБы в начале части строк, как избавиться от них?

LTRIM()
25 авг 16, 08:56    [19587430]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Count  [new]
iap
Member

Откуда: Москва
Сообщений: 47063
TaPaK
ur3om
При внимательном просмотре в столбце нашлись ТАБы в начале части строк, как избавиться от них?

LTRIM()
Это только дл пробелов.
25 авг 16, 08:58    [19587437]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Count  [new]
o-o
Guest
ur3om
При внимательном просмотре в столбце нашлись ТАБы в начале части строк, как избавиться от них?

replace(col, char(9), '')
25 авг 16, 09:31    [19587552]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Count  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
автор
Это только дл пробелов.

каюсь

o-o
ur3om
При внимательном просмотре в столбце нашлись ТАБы в начале части строк, как избавиться от них?

replace(col, char(9), '')

так все табуляции грохнет :)
25 авг 16, 09:33    [19587567]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Count  [new]
o-o
Guest
TaPaK
так все табуляции грохнет :)

он пишет, что обнаружил их только "в начале части строк".
т.е. не говорит, что они еще где-то есть и к тому же нужны.
пускай уточняет тогда, сколько табуляций и откуда именно желает выкинуть
25 авг 16, 09:47    [19587665]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Count  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
LTRIM(REPLACE(col,char(9),' '))
25 авг 16, 09:59    [19587750]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Count  [new]
sergeimv
Member

Откуда: Россия, г.Казань
Сообщений: 42
declare @str varchar(100) = '		String1		String2' --  в начале 2 таба и между String1, String2 тоже 2 таба.
select substring(@str, patindex('%[^	]%', @str), len(@str))


Убирает только лидирующие табы.
25 авг 16, 10:25    [19587879]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Count  [new]
sergeimv
Member

Откуда: Россия, г.Казань
Сообщений: 42
sergeimv
declare @str varchar(100) = '		String1		String2' --  в начале 2 таба и между String1, String2 тоже 2 таба.
select substring(@str, patindex('%[^	]%', @str), len(@str))


Убирает только лидирующие табы.

Если еще и конечные табы нужны, то +
reverse
25 авг 16, 10:32    [19587931]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Count  [new]
ur3om
Member

Откуда:
Сообщений: 16
Да табы только в начале строк, всем спасибо все понял. А что делать с остой проблемой в чем может быть косяк?
25 авг 16, 10:33    [19587934]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Count  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8836
Проблемы с компом (железо или софт) - это к вопросу о "перескакивании колонок" (при этом при запросе insert into часть строк сдвигается во второй столбец, с выводом результата в первый а часть остается на месте без явной закономерности привязки к содержимому)
25 авг 16, 20:17    [19591379]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Count  [new]
Serg_77m
Member

Откуда: Донецк
Сообщений: 237
ur3om, там в строках, случайно, нулевых символов (ASCII NUL) нет? Иногда от них глюки бывают.
26 авг 16, 10:01    [19592972]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Count  [new]
Serg_77m
Member

Откуда: Донецк
Сообщений: 237
ur3om, да и вообще, строки стоило бы проверить на наличие всех управляющих символов. Всяких там char(8), char(13), и т.п. Если табуляции есть, то могут оказаться и другие.
26 авг 16, 10:14    [19593038]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Count  [new]
aleks2
Guest
Serg_77m
ur3om, да и вообще, строки стоило бы проверить на наличие всех управляющих символов. Всяких там char(8), char(13), и т.п. Если табуляции есть, то могут оказаться и другие.


Я один не въезжаю: каким боком все эти управляющие символы могут помешать выполниться запросу:
ur3om
но при попытке подсчитать число повторов запросом

select COUNT(*), [COLUMN] from [TABLE] group by [COLUMN]

или таким

insert into [TABLE] select COUNT(*), [COLUMN] from [TABLE] group by [COLUMN]

число обработанных строк составляет только 50 млн - почти на половину меньше
при этом при запросе insert into часть строк сдвигается во второй столбец, с выводом результата в первый а часть остается на месте без явной закономерности привязки к содержимому

?
26 авг 16, 10:28    [19593104]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Count  [new]
o-o
Guest
ну если честно, то вот это
"часть строк сдвигается во второй столбец, с выводом результата в первый"
я себе не представляю никак.
так что пока картинку не вывесит, я не вникаю.
это какое-то описание дерева и памятника, где дерево "во", а мужик "в пиджаке"
26 авг 16, 11:03    [19593294]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Count  [new]
buven
Member

Откуда:
Сообщений: 792
ur3om ,

Вот это
insert into [TABLE]select COUNT(*), [COLUMN] from [TABLE]group by [COLUMN]


вот с этим никак не вяжется у меня...

ur3om
Вообще - задача стоит в том что бы в таблице появился второй столбец в котором отражалось число повторов текста из столбца 1, а затем в столбце 1 удалить все дубликаты, но оставив число повторов (до удаления дубликатов) в столбце 2


У вас перед интсертом в TABLE 98 млн строк. Вы добавили к ней колонку Qty, агрегируете то что есть и добавляете еще N млн строк к уже имеющимся 98, а потом пытаетесь понять почему не получилось задачу выполнить? Почему не апдейт + delete?

Или я что-то неправильно понимаю...
26 авг 16, 12:13    [19593636]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Count  [new]
o-o
Guest
нет, он в другую инсертит,
схлопывая дубли, но оставляя при этом их число.
ну типа было
Petja
Petja
Petja
Vasja
Vasja
он получает
Petja 3
Vasja 2
так всегда можно восстановить имевшееся.
только вот чтобы в колонку с кол-вом въехал Petja,
а 2 сместилось на место Vasja,
это како-то полет фантазии ...или экселя.
26 авг 16, 12:21    [19593686]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Count  [new]
ur3om
Member

Откуда:
Сообщений: 16
я это пробую делать в MSSQL 2012 Enterprise и MSSQL 2008 Enterprise,

счас поправил запрос на

insert into таблица select COUNT(*), столбец from таблица group by столбец HAVING count(*) > 0 ORDER BY count(*)

жду результат.
26 авг 16, 12:55    [19593910]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Count  [new]
ur3om
Member

Откуда:
Сообщений: 16
если вылезет та же ошибка приложу скрин
26 авг 16, 12:56    [19593920]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Count  [new]
ur3om
Member

Откуда:
Сообщений: 16
o-o,
Железо ни причем, пробовал дома и на работе

немного не так, первые сколько-то строк все ок,
2 петя
3 вася
5 галя

а вот потом нет смещения

2 петя
3 вася
5 галя
саша null
олег null

затем опять нормально, и так несколько раз по таблице, закономерность не могу найти

скрин перехода по ссылке
[IMG]http://s017.radikal.ru/i429/1608/94/fa57a337ae22t.jpg[/IMG]
26 авг 16, 13:13    [19594019]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Count  [new]
o-o
Guest
я ни про какое железо нигде не пишу.
если хотите показать свою картинку,
прицепите ее аттачментом к сообщению на форуме.
я на левый сайт не полезу
26 авг 16, 13:22    [19594064]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Count  [new]
ur3om
Member

Откуда:
Сообщений: 16
Основная задача такая:
таблица (один столбец):

Петя
Вася
Саша
Маша
Петя
Саша
Петя

получить надо 2 столбца (отсортировав по частоте повторов и удалив дубли):

Петя 3
Саша 2
Вася 1
Маша 1

Может как-то иначе запрос составить, не используя Count?
26 авг 16, 13:24    [19594073]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Count  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
ur3om,

что-то какую-то ересь вы выдвигаете про "смещение"

автор
не используя Count?

SUM(1) :)
26 авг 16, 13:26    [19594083]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Count  [new]
ur3om
Member

Откуда:
Сообщений: 16
о-о про железо это к ранее написавшим, раньше не заметил где прикрепляется файл,Радикал-фото не левый сайт

К сообщению приложен файл. Размер - 148Kb
26 авг 16, 13:27    [19594090]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить