powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Count(distinct)
15 сообщений из 15, страница 1 из 1
Count(distinct)
    #39131042
Шыфл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наткнулся на код, который убивае. Нужно его переписать, а мозг отказывается сотрудничать.

Код: vbnet
1.
2.
selected = DCount("*", "TA_S_RVB_read_vouchers_box", "checked = true")
All = DCount("*", "TA_S_RVB_read_vouchers_box", "rvb_number in (select distinct rvb_number from TA_S_RVB_read_vouchers_box where checked = true)")


Второй запрос мегатормозной, очевидно из-за in.
Я понимаю, что это хрень, но как её переписать то корректно? Убирание distinct проблему не решает
...
Рейтинг: 0 / 0
Count(distinct)
    #39131214
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделайте нормальный запрос, а не DCount().
...
Рейтинг: 0 / 0
Count(distinct)
    #39131221
Шыфл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

не поверишь, но
Код: vbnet
1.
DCount("*", "TA_S_RVB_read_vouchers_box", "rvb_number in (select distinct rvb_number from TA_S_RVB_read_vouchers_box where checked = true)")


ничем не отличается от
Код: sql
1.
select count(*) from TA_S_RVB_read_vouchers_box where rvb_number in (select distinct rvb_number from TA_S_RVB_read_vouchers_box where checked = true)



Что-то я так и не понял, как это можно нормально переписать по другому... Добавил индекс на rvb_number, помогло, конечно, но не летает. На 70000+ записях задержка около секунды... (раньше было около минуты)
...
Рейтинг: 0 / 0
Count(distinct)
    #39131263
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
SELECT Count(*)
FROM 
(SELECT T1.*
FROM TA_S_RVB_read_vouchers_box AS T1 INNER JOIN TA_S_RVB_read_vouchers_box AS T2 
ON T1.rvb_number=T2.rvb_number
WHERE T2.checked) AS Z;
...
Рейтинг: 0 / 0
Count(distinct)
    #39131326
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шыфлне поверишь, но
[skipped]
ничем не отличается от
[skipped]
Не поверю. Второе прекрасно переписывается в форму без подзапроса. И при наличии индексов взлетает. А первое обречено хромать.
...
Рейтинг: 0 / 0
Count(distinct)
    #39131699
Шыфл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__Michelle
Код: sql
1.
2.
3.
4.
5.
6.
SELECT Count(*)
FROM 
(SELECT T1.*
FROM TA_S_RVB_read_vouchers_box AS T1 INNER JOIN TA_S_RVB_read_vouchers_box AS T2 
ON T1.rvb_number=T2.rvb_number
WHERE T2.checked) AS Z;



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

AkinaНе поверю. Второе прекрасно переписывается в форму без подзапроса. И при наличии индексов взлетает. А первое обречено хромать.

Вот как это, прекрасно? Join задваивает записи, а первичного ключа нет...
...
Рейтинг: 0 / 0
Count(distinct)
    #39131724
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шыфл Неа, так записи дублируются, потому что в таблице нет первичного ключа....Вы пробовали? Или просто предполагаете?
У меня не задваиваются, проверила.
...
Рейтинг: 0 / 0
Count(distinct)
    #39131743
Шыфл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__Michelle, ну посчитайте, сколько получается?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
rvb_number	checked	vrf_send_date
RVB0000257355       	0	22. 6. 2015
RVB0000257356       	0	22. 6. 2015
RVB0000257357       	0	22. 6. 2015
RVB0000257357       	0	22. 6. 2015
RVB0000257357       	-1	22. 6. 2015
RVB0000257357       	-1	22. 6. 2015
RVB0000257357       	-1	22. 6. 2015
RVB0000257357       	0	22. 6. 2015
RVB0000257357       	0	22. 6. 2015
RVB0000257357       	0	22. 6. 2015
RVB0000257357       	0	22. 6. 2015
RVB0000257357       	0	22. 6. 2015
RVB0000257357       	0	22. 6. 2015
RVB0000257357       	0	22. 6. 2015
RVB0000257357       	0	22. 6. 2015
RVB0000257357       	0	22. 6. 2015
RVB0000257357       	0	22. 6. 2015
RVB0000257357       	0	22. 6. 2015
RVB0000257357       	0	22. 6. 2015
RVB0000257357       	0	22. 6. 2015
RVB0000257361       	-1	22. 6. 2015
RVB0000257361       	-1	22. 6. 2015
RVB0000257361       	-1	22. 6. 2015
RVB0000257361       	0	22. 6. 2015
RVB0000257361       	0	22. 6. 2015
RVB0000257361       	0	22. 6. 2015
RVB0000257361       	0	22. 6. 2015
RVB0000257361       	0	22. 6. 2015
RVB0000257361       	0	22. 6. 2015
RVB0000257361       	0	22. 6. 2015
RVB0000257361       	0	22. 6. 2015
RVB0000257361       	0	22. 6. 2015
...
Рейтинг: 0 / 0
Count(distinct)
    #39131864
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шыфл,

Что именно посчитать?
Я даже не знаю, это исходная таблица или результат выполнения запроса
(рассматривать пристально rvd_number в поисках одинаковых как-то не очень, так уж точно ошибусь).

Ведь, если правильно понимаю, нужно получить общее количество записей с теми rvd_number,
хотя бы для одного из которых checked=true.
Да?
...
Рейтинг: 0 / 0
Count(distinct)
    #39131877
Шыфл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__Michelle,

да, так и надо посчитать, всё строчки, rvd_number у которых хотя бы хотя бы для одного checked=true.
...
Рейтинг: 0 / 0
Count(distinct)
    #39131884
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шыфл,

Мне кажется, мой запрос делает именно это.
Разве нет?
...
Рейтинг: 0 / 0
Count(distinct)
    #39131906
Шыфл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__MichelleШыфл,

Мне кажется, мой запрос делает именно это.
Разве нет?

Ну так возьмите тестовые данные, и посмотрите, что ваш запрос выдаст 90, а мой - 30... Почему это, интересно?
...
Рейтинг: 0 / 0
Count(distinct)
    #39132313
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, действительно, результат не тот .
Хотя и не 90.
Вот поправленный запрос
Код: sql
1.
2.
3.
4.
SELECT Count(*) FROM 
(SELECT T1.*
FROM TA_S_RVB_read_vouchers_box AS T1 INNER JOIN 
(SELECT DISTINCT rvb_number FROM TA_S_RVB_read_vouchers_box WHERE checked) AS T2 ON T1.rvb_number = T2.rvb_number) AS Z

Результат 30.
...
Рейтинг: 0 / 0
Count(distinct)
    #39133453
Шыфл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__Michelle,

спасибо, работает намного быстрее, чем оригинальный вариант. Хотя я так и не понял, зачем там Z. Использую вариант
Код: sql
1.
2.
3.
4.
SELECT count(*) 
FROM TA_S_RVB_read_vouchers_box AS T1 
INNER JOIN (SELECT DISTINCT rvb_number FROM TA_S_RVB_read_vouchers_box WHERE checked) AS T2 
ON T1.rvb_number = T2.rvb_number
...
Рейтинг: 0 / 0
Count(distinct)
    #39133617
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ШыфлХотя я так и не понял, зачем там Z.Имя вложенного подзапроса.
Но само выделение этого подзапроса - архитектурное излишество, сделано для понятности.
Можно и без этого.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Count(distinct)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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