|
Запрос LEFT JOIN с применением статистических выражений
|
|||
---|---|---|---|
#18+
Добрый день! В рамках одной БД имеется две таблицы (проверки и ошибки). TableA (TableA.ID, TableA.Datechecks, TableA.CheckedFIO, TableA.CheckTypes) TableB (TableB.ID, TableB.IDA, TableB.Mistake, TableB.MistakeCriticality) Необходимо подготовить запрос, который бы отображал следующие данные: ФИО, Кол-во проверок, Общее кол-во ошибок, Кол-во ошибок_Ошибка, Кол-во ошибок_Гр.ошибка, Кол-во проверок без ошибок, кол-во проверок без грубых ошибок. Подобный запрос смог реализовать только без группировки по ФИО, вот что получилось (уверен, что можно было бы еще проще написать): авторSELECT (SELECT COUNT(*) FROM (SELECT DISTINCT TableA.ID FROM TableA LEFT JOIN TableB ON TableA.ID = TableB.IDA)) AS Проверки, COUNT(TableB.ID) AS Ошибки, SUM(IIf(TableB.MistakeCriticality='Грубая ошибка',1,0)) AS Ошибки_ГРУБАЯ, SUM(IIf(TableB.MistakeCriticality='Ошибка',1,0)) AS Ошибки_ОШИБКА, (SELECT COUNT(*) FROM (SELECT DISTINCT TableA.ID FROM TableA LEFT JOIN TableB ON TableA.ID = TableB.IDA WHERE TableB.IDA IS NULL)) AS Проверки_без_ошибок, (Проверки-(SELECT COUNT(*) FROM (SELECT DISTINCT TableA.ID FROM TableA LEFT JOIN TableB ON TableA.ID = TableB.IDA WHERE TableB.MistakeCriticality = 'Грубая ошибка'))) AS Проверки_без_Грубых_ошибок FROM TableA LEFT JOIN TableB ON TableA.ID = TableB.IDA При попытке добавить группировку по ФИО, т.е. добавляю поле TableA.CheckedFIO и в конце пишу GROUP BY TableA.CheckedFIO, выдает актуальные данные только по "Ошибки", "Ошибки_ГРУБАЯ", "Ошибки_ОШИБКА", все остальные данные имеют одинаковое значение, т.е. сумму, без разбивки по конкретным ФИО. Пожалуйста, помогите составить корректный запрос, чтобы все значения в данных отображались с учетом группировки по ФИО. Заранее спасибо! PS: Прикрепил тестовую БД с картинкой таблички, результаты которые должны быть. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2017, 13:38 |
|
Запрос LEFT JOIN с применением статистических выражений
|
|||
---|---|---|---|
#18+
Составьте объединяющий запрос, дающий детальные данные. Используйте его как источник для перекрёстного запроса. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2017, 14:12 |
|
Запрос LEFT JOIN с применением статистических выражений
|
|||
---|---|---|---|
#18+
Попробуйте так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2017, 15:41 |
|
Запрос LEFT JOIN с применением статистических выражений
|
|||
---|---|---|---|
#18+
Анатолий ( Киев ), Что-то он у меня не срабатывает. Не могли бы Вы написать запрос именно по модели бд, которую я прикладывал?! Заранее спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2017, 18:49 |
|
Запрос LEFT JOIN с применением статистических выражений
|
|||
---|---|---|---|
#18+
Denis Komarov, Код: vbnet 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2017, 20:56 |
|
Запрос LEFT JOIN с применением статистических выражений
|
|||
---|---|---|---|
#18+
а лучше правильнее так: ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2017, 01:49 |
|
Запрос LEFT JOIN с применением статистических выражений
|
|||
---|---|---|---|
#18+
sdku, спасибо за готовый запрос! К сожалению, он не совсем корректен с точки зрения тз. Он отображает не кол-во проверок, а кол-во строк ... В связи с тем, что у нас идет LEFT JOIN то выводятся все записи из таблицы проверки и ошибки. Таким образом у нас получается "задвоение" проверок. Тут нужно использовать принцип тот, что описал Анатолий ( Киев ) и Akina, но просто у меня он не сработал. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2017, 11:52 |
|
Запрос LEFT JOIN с применением статистических выражений
|
|||
---|---|---|---|
#18+
Denis KomarovЧто-то он у меня не срабатывает Что значит "не срабатывает"? Запрос строится на двух подзапросах. Создайте из них два сохраненных запроса, на них постройте основной. Если результат устроит - можете собрать всё в одном запросе. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2017, 12:53 |
|
Запрос LEFT JOIN с применением статистических выражений
|
|||
---|---|---|---|
#18+
Denis Komarov, в предложенном примере изменена структура БД(в этом основной смысл моего предложения) что же касается количества строк и количества проверок-разве это не одно и то же (1 проверке соответствует 1 строка в таблице и запрос подсчитывает именно количество) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2017, 14:18 |
|
Запрос LEFT JOIN с применением статистических выражений
|
|||
---|---|---|---|
#18+
sdku, Изменение структуры БД не по ТЗ :) Если применить INNER JOIN (к той модели БД, которую я выкладывал), то у Вас будут выведены только те значения, в которых пересекаются ID и ID_Check. Таким образом Вы потеряете проверки, которые были без ошибок. Если использовать LEFT JOIN с учетом Вашего запроса, происходит задвоение/затроение и т.п. кол-ва проверок, т.к. в одной проверке могут быть несколько ошибок. Анатолий ( Киев ), Запрос уже составил по предложенному Вами и Akina способом. Спасибо за помощь! ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2017, 17:24 |
|
Запрос LEFT JOIN с применением статистических выражений
|
|||
---|---|---|---|
#18+
Denis Komarovsdku, Изменение структуры БД не по ТЗ Информация к размышлению:а Вы уверены, на 100%, что оператор набирая, далеко не первый раз "Федоров Федор Федорович", не допустит какую-либо ошибку и создаст запись отличающуюся от предыдущих (при этом запрос выдаст неверные, для Вас, результаты) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2017, 18:52 |
|
Запрос LEFT JOIN с применением статистических выражений
|
|||
---|---|---|---|
#18+
sdku, Я что-то не понял о чем вы. :) что Вы имеете ввиду? Речь идет о заполнении бд или что? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2017, 22:15 |
|
Запрос LEFT JOIN с применением статистических выражений
|
|||
---|---|---|---|
#18+
Denis Komarov, Речь именно о заполнении. Одной из главных задач разработчика считаю-не позволить юзеру ввести данные,которые нарушат работу БД. При Вашей структуре ошибка в заполнении приведет к неправильной работе БД (а зачем нужна база,которая при малейшей ошибке будет некорректно работать. Федоров Федор Федорович<> Федоров Фёдор Федорович) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2017, 00:53 |
|
|
start [/forum/topic.php?fid=45&msg=39507599&tid=1612168]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
33ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 278ms |
total: | 413ms |
0 / 0 |