Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Активные темы » SQL запрос

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 34 35 36 37 38 39 40 41 42 43

Открыть новую тему     Написать ответ в эту тему

Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
granitiv
ну, в SELECT MIN(speed), AVERAGE(speed), MAX(speed)

Всего записей: 15118 | Зарегистр. 20-09-2014 | Отправлено: 09:40 06-12-2023
Molodetsss

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть футбольная таблица:
id
match_id (ссылается на таблицу игр)
player_id (ссылается на таблицу игроков)
 
То есть допустим так:
1  1  1
1  1  2
1  1  22
 
Как написать запрос, чтобы он показал, какие 2 игрока выходили вместе чаще всего (но более 30 раз), то есть:
player1_id
player2_id
count_matches
 
Спасибо

Всего записей: 137 | Зарегистр. 24-04-2022 | Отправлено: 13:25 13-01-2024
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Molodetsss
для MySQL:
SELECT t1.player_id, t2.player_id, count(*) matches
FROM games t1
JOIN games t2 ON t1.match_id = t2.match_id AND t1.player_id <> t2.player_id
GROUP BY t1.player_id, t2.player_id
HAVING count(*) BETWEEN 2 AND 30
 
минус - будет выводиться два раза, для одного и для второго игрока.

Всего записей: 15118 | Зарегистр. 20-09-2014 | Отправлено: 13:44 13-01-2024 | Исправлено: Mavrikii, 13:48 13-01-2024
Molodetsss

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
минус - будет выводиться два раза, для одного и для второго игрока.

 
спасибо! это не страшно.
 
А как еще составить запрос, чтобы он в убывающем порядке вывел игроков, которые провели более 100 матчей?

Всего записей: 137 | Зарегистр. 24-04-2022 | Отправлено: 13:52 13-01-2024
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Molodetsss

Цитата:
А как еще составить запрос, чтобы он в убывающем порядке вывел игроков, которые провели более 100 матчей?

Делаете HAVING count(*) > 100 и добавляете ORDER BY matches DESC

Всего записей: 15118 | Зарегистр. 20-09-2014 | Отправлено: 13:54 13-01-2024 | Исправлено: Mavrikii, 13:58 13-01-2024
Molodetsss

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
 
извините, не понял последний ответ.
 
Вот есть футбольная таблица:
id
match_id (ссылается на таблицу игр)
player_id (ссылается на таблицу игроков)  
role_id (амплуа, 0 - тренер, 1 - игрок)
 
Как составить запрос, чтобы он в убывающем порядке вывел игроков (когда играл, а не был тренером), которые провели более 100 матчей?

Всего записей: 137 | Зарегистр. 24-04-2022 | Отправлено: 14:46 14-01-2024
vikkiv



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
...когда играл, а не был тренером...

добавляешь условие фильтрации
where role_id=1
 
дальше как уже указали выше при агрегации group by player_id:

Цитата:
которые провели более 100 матчей
having count (distinct match_id)>100

Цитата:
...убывающем порядке...
order by count(distinct match_id) desc
 
Добавлено:
distinct добавит нагрузки но без знания качества данных лучше пока так

Всего записей: 747 | Зарегистр. 10-11-2005 | Отправлено: 18:51 14-01-2024
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Molodetsss

Цитата:
извините, не понял последний ответ.

что же тут непонятного?
 

Код:
SELECT t1.player_id, t2.player_id, count(*) matches
FROM games t1
JOIN games t2 ON t1.match_id = t2.match_id AND t1.player_id <> t2.player_id
WHERE t1.role_id = 1 AND t2.role_id = 1
GROUP BY t1.player_id, t2.player_id
HAVING count(*) > 100
ORDER BY matches DESC

Всего записей: 15118 | Зарегистр. 20-09-2014 | Отправлено: 23:07 14-01-2024
ArkadyKiller



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Ребята подскажите как мне правильно написать запрос: есть три таблицы:
Таблица 1 - _1SJOURN
Таблица 2 - DH48046
Таблица 3 - DT48046
 
в каждой таблице есть одно поле IDDOC
 
Мне нужно написать запрос, найти данные в таблицах DH48046 и DT48046 которые отсутствуют в таблице _1SJOURN и удалить их из этих двух таблиц
 
связка идет по полю IDDOC

Всего записей: 701 | Зарегистр. 28-09-2006 | Отправлено: 04:07 11-04-2024
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ArkadyKiller

Код:
DELETE table1, tablle2 FROM table1
INNER JOIN table2 ON table1.IDDOC = table2.IDDOC
LEFT JOIN table3 ON table3.IDDOC = table1.IDDOC
WHERE table3.IDDOC IS NULL

 
не проверял  
 
подразумевается, что данные есть в обоих table1 и table2, если только в одной - удалено не будет.

Всего записей: 15118 | Зарегистр. 20-09-2014 | Отправлено: 05:06 11-04-2024 | Исправлено: Mavrikii, 05:07 11-04-2024
ArkadyKiller



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Mavrikii
ща погоди селектом пробегусь
просто в таблице _1SJOURN мало записей, и я хочу очистить от лишнего мусора в таблицках DH48046 и DT48046, вот и мучаюсь, мне нужно чтобы остались данные в таблицах DH48046 и DT48046 которые соответствуют данным в таблице _1SJOURN, у них всех общее поле IDDOC
 
 
Таблица _1SJOURN считается эталоном, а в запросе у тебя удаление из нее идет ))) и в таблицах нет пустых значений iddoc. тут нужно запрос соответствия, как бы обьяснить то.
 
 
В общем таблица _1SJOURN есть например 10000 записей, а в таблицах DH48046 и DT48046 осталось 5000000 записей, так вот мне нужно удалить записи из таблиц DH48046 и DT48046 у которых поля iddoc не равны значениям iddoc в таблице _1SJOURN

----------
[img]https://mynickname.com/forum/Arkady_Killer.gif[/img]

Всего записей: 701 | Зарегистр. 28-09-2006 | Отправлено: 05:10 11-04-2024 | Исправлено: ArkadyKiller, 05:21 11-04-2024
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ArkadyKiller

Цитата:
Таблица _1SJOURN считается эталоном, а в запросе у тебя удаление из нее идет  

у меня не указаны имена таблицы, только table1, table2, table3 - подразумевается что сами замените.
 

Цитата:
В общем таблица _1SJOURN есть например 10000 записей, а в таблицах DH48046 и DT48046 осталось 5000000 записей, так вот мне нужно удалить записи из таблиц DH48046 и DT48046 у которых поля iddoc не равны значениям iddoc в таблице _1SJOURN

я это и так понял.
 
table1 = DH48046
table2 = DT48046
table3 = _1SJOURN
 
я вообще не вникал в названия, так как показываю общий вид запроса
 
можно просто по очереди, сначала в одной, потом в другой
 
DELETE table1 FROM table1
LEFT JOIN table3 ON table3.iddoc = table1.iddoc
WHERE table3.iddoc IS NULL
 
затем
DELETE table2 FROM table2
LEFT JOIN table3 ON table3.iddoc = table2.iddoc
WHERE table3.iddoc IS NULL

Всего записей: 15118 | Зарегистр. 20-09-2014 | Отправлено: 05:57 11-04-2024 | Исправлено: Mavrikii, 06:05 11-04-2024
ArkadyKiller



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Mavrikii
да, можно и нужно через два запроса, ибо одним это муторно и сложно потом проверить, а пошагово сначала в одной потом в другой. ладно ща проверю твои запросы
 
Добавлено:
ога выполнил, ща проверю базу
 
документы необходимые на месте, ничего не поплыло, сейчас пробегусь по базе тестирование и исправление на всякий случай и сверю отчет книгу продаж.
 
 
ну база стала меньше по обьему, уже радует.

Всего записей: 701 | Зарегистр. 28-09-2006 | Отправлено: 06:19 11-04-2024 | Исправлено: ArkadyKiller, 06:36 11-04-2024
Guch68

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Коллеги, доброго дня.
Задача такая:
Есть таблица Типа распечатки для Комплектующего
 
PRINTTYPARTS
2 колонки
IDArt  PrTypNo
 
ARTICLES - Таблица Комплектующих  
IDArt - главная колонка по которой женится с PRINTTYPARTS
 
Так вот суть запроса - Вставить все IDArt и присвоить значение = 5
 
Моя проба пера:
INSERT INTO PRINTTYPARTS (IDART, PRTYPNO)
VALUES ((SELECT a.IDArt From ARTICLES a),5)
 
Но в PRINTTYPARTS залетает лишь ОДНО значение (первое) IDArt со значением PRTYPNO = 5.
Как заставить залить все IDART и присвоить им значение 5.

Всего записей: 49 | Зарегистр. 26-04-2015 | Отправлено: 09:45 11-04-2024
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Guch68
INSERT INTO PRINTTYPARTS (IDART, PRTYPNO)
SELECT IDArt, 5 From ARTICLES

Всего записей: 15118 | Зарегистр. 20-09-2014 | Отправлено: 09:50 11-04-2024
Guch68

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
INSERT INTO

 
Ура!!! Заработало!  
Значит перемудрил с Подзапросом с SELEKT

Всего записей: 49 | Зарегистр. 26-04-2015 | Отправлено: 10:04 11-04-2024
Guch68

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Коллеги, помогите с запросом.
На мой взгляд проблема в том, что все действия хочу провести с одной Таблицей.
Суть ее в том, что:
Наборы фурнитур имеют как Положительные так и Отрицательные ID
Положительные - это Основное название фурнитуры
Отрицательные - это Набор спецификаций для Основной, а так же Набор в Наборе(Матрёшка)
Если Отрицательный ID находится в Столбце ROOT, то он соответствует основному набору и его нужно переименовать, прикрепив в начале #
На примере --  
321 KALE Фрамуга   ->  -551 KALE Фрамуга
     Задать имя для        -551 #KALE Фрамуга
 
По Сути, если IDFUR встречается в столбце ROOT - переименовать для него RURNAME добавив # к названию
 
http://joxi.ru/Q2KlEwNTXqZlyA - скрин таблицы
 
Вангую, что нужно создать временную таблицу и в ней делать JOIN с последующим переименованием.
Но такого я никогда не делал, вот и прошу помощи.

Всего записей: 49 | Зарегистр. 26-04-2015 | Отправлено: 11:18 14-04-2024
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Guch68
UPDATE tablename SET FURNAME = CONCAT('#', FURNAME)
WHERE IDFUR IN (SELECT ROOT FROM tablename WHERE ROOT < 0)
 
ps: не проще переименовать все с отрицательными IDFUR?
 
в некоторых базах может быть не CONCAT, а что то еще
в Firebird, к примеру, будет = '#' || FURNAME

Всего записей: 15118 | Зарегистр. 20-09-2014 | Отправлено: 23:12 14-04-2024 | Исправлено: Mavrikii, 23:17 14-04-2024
Guch68

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
ps: не проще переименовать все с отрицательными IDFUR?

 
Благодарю, буду пробовать.
 
Нет, это будет неудобно. Переименовываю, чтобы со знаком # Наборы залетали в верх списка, тогда видно какие наборы именно Главные в этой Матрешке.
 
ps: Спасибо. Запрос работает!

Всего записей: 49 | Зарегистр. 26-04-2015 | Отправлено: 11:36 15-04-2024 | Исправлено: Guch68, 16:00 15-04-2024
ArkadyKiller



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Mavrikii
бро, подскажи мне , как мне ускорить проведение документа в 1с7.7 SQL сервер SQL2019, уже все перепробовал, все дельные и не дельные советы. Чтение данных быстро, а вот проводка документов задержка от 1-8 секунд в зависимости сколько позиций, например 15 позиций проводит 6-7 секунд

Всего записей: 701 | Зарегистр. 28-09-2006 | Отправлено: 07:52 18-04-2024
Открыть новую тему     Написать ответ в эту тему

Страницы: 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 34 35 36 37 38 39 40 41 42 43

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Активные темы » SQL запрос


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru