простой SQL таск

Все, что вы хотели знать о программизме, но боялись спросить.
Ответить
Аватара пользователя
Lepsik
Житель
Сообщения: 522
Зарегистрирован: 17 фев 2003, 18:34
Откуда: Berlin
Контактная информация:

простой SQL таск

Сообщение Lepsik »

-- как выбрать в запросе записи с полем type более 2 раз и числом 2

create table pic (int id, type char)
GO
insert into pic (id, type) VALUES (1, 'a')
insert into pic (id, type) VALUES (2, 'a')
insert into pic (id, type) VALUES (3, 'a')
insert into pic (id, type) VALUES (4, 'b')
insert into pic (id, type) VALUES (5, 'b')
insert into pic (id, type) VALUES (6, 'b')
insert into pic (id, type) VALUES (17, 'c')
GO
--

то есть результат должен быть

1, 'a'
2, 'a'
4, 'b'
5, 'b'

нутром чую должно быть просто
Аватара пользователя
папа Карло
Шарманщик
Сообщения: 8565
Зарегистрирован: 17 фев 2003, 15:04
Откуда: НН -> BC -> WA -> UT -> CA

Сообщение папа Карло »

нутро твое чует неверно :) ты когда деньги начнешь платить? :)
Аватара пользователя
Lepsik
Житель
Сообщения: 522
Зарегистрирован: 17 фев 2003, 18:34
Откуда: Berlin
Контактная информация:

Сообщение Lepsik »

--нутро твое чует неверно ты когда деньги начнешь платить?

когда мне много начнут платить :)
Аватара пользователя
Lepsik
Житель
Сообщения: 522
Зарегистрирован: 17 фев 2003, 18:34
Откуда: Berlin
Контактная информация:

Сообщение Lepsik »

ладно уж тоже мне рокет саенс

create view t1 as (select count(*)as num, type from picture group by type)
select * from pic where type in (select type from t1 where t1.num > 2)

хотя наврал. выбрать ровно по 2 рекорды неполается
Аватара пользователя
папа Карло
Шарманщик
Сообщения: 8565
Зарегистрирован: 17 фев 2003, 15:04
Откуда: НН -> BC -> WA -> UT -> CA

Сообщение папа Карло »

Lepsik писал(а):--нутро твое чует неверно ты когда деньги начнешь платить?

когда мне много начнут платить :)
тебе платят за ту работу что ты тут постоянно спрашиваешь. так-что делись. тебе чисто символически 25 каксов в час :lol:
Аватара пользователя
папа Карло
Шарманщик
Сообщения: 8565
Зарегистрирован: 17 фев 2003, 15:04
Откуда: НН -> BC -> WA -> UT -> CA

Сообщение папа Карло »

так пойдет?

Код: Выделить всё


create table tab 
(
	a int primary key,
	b varchar(10)
)

insert into tab values ( 1, 'a')
insert into tab values ( 2, 'a')
insert into tab values ( 3, 'a')
insert into tab values ( 4, 'b')
insert into tab values ( 5, 'b')
insert into tab values ( 6, 'b')
insert into tab values ( 7, 'c')

select
	min(a),
	b
from	
	tab A
where
	exists(select count(*) from tab B where B.b = A.b having count(*) >= 2)
group by
	b
union
select
	min(C.a),
	C.b
from
	tab C,
	(
		select
			min(a) as a,
			b
		from	
			tab A
		where
			exists(select count(*) from tab B where B.b = A.b having count(*) >= 2)
		group by
			b
	) D
where
	D.b = C.b and
	D.a < C.a
group by
	C.b

drop table tab
Аватара пользователя
Lepsik
Житель
Сообщения: 522
Зарегистрирован: 17 фев 2003, 18:34
Откуда: Berlin
Контактная информация:

Сообщение Lepsik »

вау. ну зачем так сложно. яже просил по-проще. такие конструкции наверное час времени отнимают. можно же по и так :

select id, type from pic p1 inner join (select count(id), type from pic group by type having count(id)>=2) p2 on p1.type=p2.type

--тебе платят за ту работу что ты тут постоянно спрашиваешь. так-что делись. тебе чисто символически 25 каксов в час

договорились симолически поделюсь. :lol:
Аватара пользователя
папа Карло
Шарманщик
Сообщения: 8565
Зарегистрирован: 17 фев 2003, 15:04
Откуда: НН -> BC -> WA -> UT -> CA

Сообщение папа Карло »

Lepsik писал(а):вау. ну зачем так сложно. яже просил по-проще. такие конструкции наверное час времени отнимают. можно же по и так :

select id, type from pic p1 inner join (select count(id), type from pic group by type having count(id)>=2) p2 on p1.type=p2.type
во первых я потратил 10 минут на это :)

во вторых твой селект не работает. чтобы он заработал я исправил две ошибки :)

в третьих даже после этого он не вернул результат который соответствует требованиям. :)

Код: Выделить всё

a           b          
----------- ---------- 
1           a
2           a
3           a
4           b
5           b
6           b
а должно быть как ты сказал:

Код: Выделить всё

a           b          
----------- ---------- 
1           a
2           a
4           b
5           b
тщательнее надо, товарищ! :twisted:
Ответить