Size: a a a

SqlCom.ru - Стиль жизни SQL

2020 July 29

YS

Yaroslav Schekin in SqlCom.ru - Стиль жизни SQL
Дмитрий В
подскажите пож как одним запросом посчитать несколько count-ов с разными условиями?
Ещё вариант:
... COUNT(CASE WHEN <условие1> THEN 1 END), COUNT(CASE WHEN <условие2> THEN 1 END), ...
источник

А

Андрій in SqlCom.ru - Стиль жизни SQL
Yaroslav Schekin
Ещё вариант:
... COUNT(CASE WHEN <условие1> THEN 1 END), COUNT(CASE WHEN <условие2> THEN 1 END), ...
да так навреное проще будет
источник

ДВ

Дмитрий В in SqlCom.ru - Стиль жизни SQL
спасибо большое, ща попробую повторить это jooq-ом
источник

YS

Yaroslav Schekin in SqlCom.ru - Стиль жизни SQL
sb00cker
Решал таск на одном сайт для практики SQL:
"Укажите сражения, которые произошли в годы, не совпадающие ни с одним из годов спуска кораблей на воду"
Моё решение (говорит, что записей на 16 меньше, чем нужно):
select name from battles 
where DATEPART(yy, date) not in
(select launched from ships)
Правильное решение:
select name from battles 
where DATEPART(yy, date) not in
(select DATEPART(yy, date) from battles join ships on DATEPART(yy, date)=launched)
Можете, пожалуйста, объяснить, в чем косяк моего решения? Как мне кажется, это одно и тоже
Вам кажется неправильно. ;)
Вы хоть бы взяли какие-то тестовые данные, и пробовали части запроса на них — увидели бы ошибку сразу, я практически уверен.
По шагам запросы стоит писать и проверять, особенно когда учитесь.
источник

А

Асташкин Андрей... in SqlCom.ru - Стиль жизни SQL
sb00cker
Решал таск на одном сайт для практики SQL:
"Укажите сражения, которые произошли в годы, не совпадающие ни с одним из годов спуска кораблей на воду"
Моё решение (говорит, что записей на 16 меньше, чем нужно):
select name from battles 
where DATEPART(yy, date) not in
(select launched from ships)
Правильное решение:
select name from battles 
where DATEPART(yy, date) not in
(select DATEPART(yy, date) from battles join ships on DATEPART(yy, date)=launched)
Можете, пожалуйста, объяснить, в чем косяк моего решения? Как мне кажется, это одно и тоже
результаты этих запросов будут отличаться если в таблице battles есть строки где date NULL
источник

А

Андрій in SqlCom.ru - Стиль жизни SQL
Асташкин Андрей
результаты этих запросов будут отличаться если в таблице battles есть строки где date NULL
Но он должен быть нот нулл по схеме...
источник

А

Андрій in SqlCom.ru - Стиль жизни SQL
источник

s

sb00cker in SqlCom.ru - Стиль жизни SQL
Асташкин Андрей
результаты этих запросов будут отличаться если в таблице battles есть строки где date NULL
я проверку на нулл делал, тоже самое
источник

А

Андрій in SqlCom.ru - Стиль жизни SQL
select battles.name
from battles left join ships on DATEPART(yy, date) = launched
where ships.name is null
Тоже воспринимает как валидное
источник

YS

Yaroslav Schekin in SqlCom.ru - Стиль жизни SQL
Андрій
С виду — launched, наоборот, NULL-able. Там схема в виде CREATE TABLEs есть?
источник

А

Андрій in SqlCom.ru - Стиль жизни SQL
ааа блин
источник

А

Андрій in SqlCom.ru - Стиль жизни SQL
секундочку
источник

А

Андрій in SqlCom.ru - Стиль жизни SQL
если в ИН есть нулл оно не может проверить есть там год или нет
источник

А

Андрій in SqlCom.ru - Стиль жизни SQL
sb00cker
я проверку на нулл делал, тоже самое
дело в том что null<>null
и если лаунчет нулл, оно не может сказать был ли 2020 там или нет
источник

s

sb00cker in SqlCom.ru - Стиль жизни SQL
select name from battles 
where DATEPART(yy, date) not in
(select launched from ships where launched is not null)

Точно, такое прокатывает
источник

YS

Yaroslav Schekin in SqlCom.ru - Стиль жизни SQL
Андрій
select battles.name
from battles left join ships on DATEPART(yy, date) = launched
where ships.name is null
Тоже воспринимает как валидное
По моему скромному мнению (хотя я схему и т.п. особо не смотрел) — задача, похоже, сделана для того, чтобы показать опасность использования NOT IN, и научить человека [NOT] EXISTS... а не вот этому вот. :)
источник

s

sb00cker in SqlCom.ru - Стиль жизни SQL
Спасибо большое
источник

А

Андрій in SqlCom.ru - Стиль жизни SQL
Yaroslav Schekin
По моему скромному мнению (хотя я схему и т.п. особо не смотрел) — задача, похоже, сделана для того, чтобы показать опасность использования NOT IN, и научить человека [NOT] EXISTS... а не вот этому вот. :)
источник

А

Андрій in SqlCom.ru - Стиль жизни SQL
я честно говоря и сам упустил чет этот момент
источник

А

Андрій in SqlCom.ru - Стиль жизни SQL
sb00cker
Спасибо большое
вот простой пример попонятней)
select * from(
values (1)
)v(i)
where
i not in (select null)
источник