Форум программистов, компьютерный форум, киберфорум
Наши страницы
MySQL
Войти
Регистрация
Восстановить пароль
 
kikuri
1 / 1 / 0
Регистрация: 25.04.2018
Сообщений: 36
1

[уровень наверно сложный] верны ли мои знания и sql по ним

15.01.2020, 23:52. Просмотров 186. Ответов 5

SQL
1
WHERE (`id` IN (1,4,5,567,3563546) AND `n`>60) AND (`id` NOT IN (2,7,5,577,35635) AND `n`>60)
Это выведет данные где '`id` IN' ' `n`>50' при этом отфильтровав(исключив) 'id` NOT IN' ' `n`<50'.
Это так?



Ниже описал для себя задачу

имеется табл.
`id_1``type``id_1``n`
id > 0
type > 0
n это 0-100
`id_1` может иметь `id_2`=1 and `id_2`=4

надо вывести
`id_1`, count(`n`) as `count_n` sort by `count_n` desc LIMIT 40 OFFSET 0
по условиям
type in (9,6,45)
включив
`id_1` где (`id_2` IN (1,2, ...) AND `n`>60)
при этом исключить
`id_1` где (`id_2` IN (4,7, ...) AND `n`>60)

Добавлено через 12 минут
SQL
1
2
3
4
5
6
7
8
9
10
SELECT  `table_2`.`id_1`, COUNT( `table_2`.`n`) AS `total`
FROM (
  SELECT `id_1`, `id_2`, `n`
  FROM `table`
  WHERE (`id` IN (1,4,5,567,3563546) AND `n`>60) AND (`id` NOT IN (2,7,5,577,35635) AND `n`>60)
) AS `table_2`
WHERE 
GROUP BY `table_2`.`id_1`
ORDER BY `total` DESC
LIMIT 40 OFFSET 0
Добавлено через 4 минуты
Для таких запросов наверно кеширование можно отключать?!
Это возможно как то оптимизировать?

Добавлено через 4 минуты
тема сложна по причине того что нужны глубокие знания
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.01.2020, 23:52
Ответы с готовыми решениями:

Верны ли мои записи.матрицы
Подскажите, верны ли мои записи.. 1)Дана динамическая матрица размером , где M -четное -...

Дополните мои знания (структуры и перечисления)
Здравствуйте. Изучаю основы ООП C++. Хочу сделать вот какую штуку! 1) Хочу выкладывать исходники...

Упростить Мои Кривые знания по Math
function rewriteValSQL (){ $q = mysql_query(&quot;SELECT GMT,id FROM timezones_public&quot;); while...

Оцените мои знания веб разработчика пожалуйста
Вообщем ситуация такая. Я уже около года занимаюсь веб разработкой, и сейчас хочу попробовать...

Поднять уровень знания языка
Здравствуйте. Вообщем, проблема следующая, как поднять уровень владения языком до нормального. Был...

5
crautcher
2071 / 2032 / 475
Регистрация: 27.05.2011
Сообщений: 6,987
16.01.2020, 16:36 2
Давай рассмотрим
MySQL
1
WHERE (`id` IN (1,4,5,567,3563546) AND `n`>60) AND (`id` NOT IN (2,7,5,577,35635) AND `n` > 60)
Во первых n > 6 дублируется, что не имеет смысла, это тоже самое, что и
MySQL
1
WHERE  `n` > 60 AND `id` IN (1,4,5,567,3563546) AND `id`  NOT IN (2,7,5,577,35635)
Теперь смотри, первое условие исключает второе. Предположим у тебя есть запись где
`n` 61 и `id` 2

`id` IN (1,4,5,567,3563546) не пропустит его и not in(...) бессмысленный

Поэтому все условие можно свести к
MySQL
1
WHERE  `n` > 60 AND `id` IN (1,4,5,567,3563546)
1
kikuri
1 / 1 / 0
Регистрация: 25.04.2018
Сообщений: 36
16.01.2020, 17:41  [ТС] 3
crautcher, приводишь 1 частный случай из 3.
1. есть в IN, нет в NOT IN
2. есть в NOT IN, нет в IN
3 Есть и там и тут(теоретически можно отфильтровать во время генерации sql)

подзапрос излишен
SQL
1
2
3
4
5
6
SELECT  `id_1`, SUM( `n`) AS `total`
FROM `table`
WHERE (`id_2` IN (1,4,5,567,3563546) AND `n`>60)
GROUP BY`id_1`
ORDER BY `total` DESC
LIMIT 40 OFFSET 0
и как убрать те строки `id_1` где (`id_2` NOT IN (...) AND `n`>60)
0
crautcher
2071 / 2032 / 475
Регистрация: 27.05.2011
Сообщений: 6,987
16.01.2020, 17:46 4
Цитата Сообщение от kikuri Посмотреть сообщение
3 Есть и там и тут
Аксиома: то, что есть и там и тут не выберится никогда.
MySQL
1
where id in(1) and id not in(1)
выражение, которое никогда ничего не даст
1. есть в IN, нет в NOT IN
2. есть в NOT IN, нет в IN
Это одно и тоже, если чего-то нет в in() то оно не выберется, не зависимо от твоего not in()
1
kikuri
1 / 1 / 0
Регистрация: 25.04.2018
Сообщений: 36
16.01.2020, 18:00  [ТС] 5
SQL
1
2
3
4
5
6
7
SELECT SQL_NO_CACHE  `id_1`, SUM( `n`) AS `total`
FROM `table`
WHERE (`id_2` IN (1,4,5,567,3563546) AND `n`>60) 
  AND NOT EXISTS (SELECT `id_1` FROM `table` WHERE `id_2` IN (7,978) AND `n`>60 LIMIT 1) 
GROUP BY`id_1`
ORDER BY `total` DESC
LIMIT 40 OFFSET 0
0
Joeymax
1072 / 361 / 84
Регистрация: 31.03.2012
Сообщений: 983
17.01.2020, 09:32 6
Цитата Сообщение от kikuri Посмотреть сообщение
Есть и там и тут
Мне кажется, что ТС не понимает сути двоичной (троичной) и ИЧСХ ваатще какой либо логики.

Не по теме:

И да, я тоже не понимаю, что нужно ТС

1
17.01.2020, 09:32
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.01.2020, 09:32

Нужен тест на уровень знания Excel
Всем привет. Делаю небольшой тест на знание Excel. Как сделать, чтобы при запуске файла, происходил...

Какой у меня уровень знания C++? Для специалистов
Опыта работы нет. Хочу написать резюме на стажера, но не знаю что написать про C++. Как мне...

Мои мысли о Java (уровень - zero)
Здравствуйте дорогие друзья! Хочу поделить с вами своими мыслями и суждениями в области...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.