Страница 1 из 1
простой SQL таск
Добавлено: 17 июл 2003, 14:08
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'
нутром чую должно быть просто
Добавлено: 17 июл 2003, 14:13
папа Карло
нутро твое чует неверно

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

Добавлено: 17 июл 2003, 14:16
Lepsik
--нутро твое чует неверно ты когда деньги начнешь платить?
когда мне много начнут платить

Добавлено: 17 июл 2003, 14:23
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 рекорды неполается
Добавлено: 17 июл 2003, 15:31
папа Карло
Lepsik писал(а):--нутро твое чует неверно ты когда деньги начнешь платить?
когда мне много начнут платить

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

Добавлено: 17 июл 2003, 15:45
папа Карло
так пойдет?
Код: Выделить всё
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
Добавлено: 17 июл 2003, 23:24
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 каксов в час
договорились симолически поделюсь.

Добавлено: 18 июл 2003, 07:19
папа Карло
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
а должно быть как ты сказал:
тщательнее надо, товарищ!
