Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Выборка по каждой строке / 13 сообщений из 13, страница 1 из 1
11.04.2020, 00:20
    #39946097
Siompc
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка по каждой строке
Добрый день спецы по SQL ) Такая ситуация. Есть две таблицы. Первая "Группы":

КОД | ГРУППА(int)

Вторая таблица "Данные":

КОД | ГРУППА(int) | ПАРАМЕТР(str)

В своем проекте я реализовал задачу так: делаю первый запрос, получаю список групп удовлетворяющим условию. Например Группы.ГРУППА > 50
Сохраняю все полученные номера. Потом по каждому номеру группы делаю второй запрос - SELECT COUNT(*) FROM Данные WHERE ГРУППА=*Один из сохраненных номеров*
По сути я получаю количество строк для каждой отобранной группы. А теперь вопрос.
Не знаю как будет это в плане производительности, но как сделать это в одном запросе? Что бы для каждой из строк, отобранных в первом запросе, добавлялась еще одна колонка, в которой будет подсчет строк для этой группы. Вроде бы делал такое очень давно. Но память подводит ) Прошу помощи
...
Рейтинг: 0 / 0
11.04.2020, 11:10
    #39946130
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка по каждой строке
Dcount
...
Рейтинг: 0 / 0
11.04.2020, 12:50
    #39946137
Siompc
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка по каждой строке
sdku, это функция из скриптов vb в access. Моя программа не работает с этими функциями. Можно реализовать это в самом запросе?
...
Рейтинг: 0 / 0
11.04.2020, 13:00
    #39946138
ИВП
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка по каждой строке
Siompc,
просто count()
...
Рейтинг: 0 / 0
11.04.2020, 13:08
    #39946140
Siompc
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка по каждой строке
ИВП, Я знаю. Но каким образом ее вставить, что бы она считала для каждой строки первой выборки разные значения?

НАПРИМЕР:


SELECT Группы.КОД WHERE Группы.ГРУППА>4 - здесь получили список из кодов, например, 5,8,9. Только в этом же запросе нужно чтобы рядом с кодом 5 был столбец, показывающий количество строк во второй таблце. Как будто выполнен запрос SELECT COUNT(*) FROM Данные WHERE Данные.ГРУППА=5 (8,9)

Как это объединить в 1 запрос?
...
Рейтинг: 0 / 0
11.04.2020, 13:18
    #39946142
nik26
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка по каждой строке
Тут напрашивается цикл с перебором номеров групп, но насколько я помню в sql нет такой функции.

Я бы сам сделал это на 2 циклах с рекордсетами. 1 перебирает номера, 2 выводит кол-во. Рекордсеты и циклы, по-моему, есть в любой программе.
...
Рейтинг: 0 / 0
11.04.2020, 13:22
    #39946144
nik26
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка по каждой строке
nik26
Тут напрашивается цикл с перебором номеров групп, но насколько я помню в sql нет такой функции.

Или я не понял и тут плохое объяснение
...
Рейтинг: 0 / 0
11.04.2020, 13:22
    #39946145
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка по каждой строке
Siompc,

Код: sql
1.
SELECT Группа, Count(*) FROM Данные GROUP BY Группа
...
Рейтинг: 0 / 0
11.04.2020, 13:28
    #39946147
vmag
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка по каждой строке
Siompc
Как это объединить в 1 запрос?


count() обычно идет с GROUP BY...

Код: sql
1.
2.
3.
4.
SELECT Группы.ГРУППА, Count(Данные.ПАРАМЕТР) AS [Count-ПАРАМЕТР]
FROM Группы INNER JOIN Данные ON Группы.ГРУППА = Данные.ГРУППА
GROUP BY Группы.ГРУППА
HAVING (((Группы.ГРУППА)>4));
...
Рейтинг: 0 / 0
11.04.2020, 13:52
    #39946151
Siompc
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка по каждой строке
nik26
Тут напрашивается цикл с перебором номеров групп, но насколько я помню в sql нет такой функции.

Я бы сам сделал это на 2 циклах с рекордсетами. 1 перебирает номера, 2 выводит кол-во. Рекордсеты и циклы, по-моему, есть в любой программе.


Да, я так и сделал. Думал просто объединить это в один запрос и получить сразу все значения ))
...
Рейтинг: 0 / 0
11.04.2020, 15:45
    #39946170
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка по каждой строке
поправил
vmag
Код: sql
1.
2.
3.
4.
SELECT Группы.ГРУППА, Count(Данные.ПАРАМЕТР) AS [Count-ПАРАМЕТР]
FROM Группы INNER JOIN Данные ON Группы.ГРУППА = Данные.ГРУППА
WHERE Группы.ГРУППА>4
GROUP BY Группы.ГРУППА;

...
Рейтинг: 0 / 0
11.04.2020, 15:57
    #39946172
vmag
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка по каждой строке
Панург,

Ну да, так наверное правильнее, но результат скорее всего будет одинаковый
...
Рейтинг: 0 / 0
11.04.2020, 17:24
    #39946194
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка по каждой строке
vmag
Панург,

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

WHERE - сначала фильтруем множество и далее работаем с полученным

HAVING - сначала работаем со всем множеством и уже в заключении фильтруем.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Выборка по каждой строке / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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