Если кому интересно - задачки по SQL с собеседований
Последние две, вроде, решили, а вот первую никак. Подскажи решение, плз.
SELECT t1.NAME as Name, count(*) as Index
FROM TABLE1 as t1, TABLE1 as t2
WHERE t2.ID<=t1.ID
GROUP BY t1.NAME
1 n1
3 n2
2 n3
4 n4
Твой выдаст:
n1 1
n2 3
n3 2
n4 4
а должен:
1 1 n1
2 3 n2
3 2 n3
4 4 n4
В любом случае, неправильно пронумерованы поля.
SELECT count(*) as Index, t1.ID as ID, t1.NAME as NAME
FROM TABLE1 as t1, TABLE1 as t2
WHERE t2.ID<=t1.ID
GROUP BY t1.NAME
ORDER BY Index
Во-первых твой алгоритм сделает перестановку строк изначальной таблицы (вроде, это нарушение условия задачи); во-вторых, твой GROUP BY t1.NAME все портит. Тебе надо было сказать
GROUP BY t1.ID. Тогда ты бы все занумеровал, но не попорядку.
Возможно, я усложнил задачу, но, мне кажется, что ID должны выдаваться в том же порядке, в котором они записаны изначально, а твой вариант меняет этот порядок, хотя и нумерует кортежи.
маза ты плохо читал условие
У меня склонность к усложнению задач. А теперь давайте ее решим в моей постановке или докажем, что это невозможно в рамках стандарта SQL
Необходимо сделать нумерацию, не изменяя первоначальной очередности кортежей.
Я бы воспринял это как намёк, что решение должно быть практическим,
то есть должно работать, а не удовлетворять стандартам
ЗЫ: я по прежнему считаю, что твоя прога не работает (даже в исходной постановке). Твой первый вариант мы даже прогнали на машине. Второй - на уровне логики (см. мой пост где-то выше). Ты его прогонял на примерах? (сосед спит, так что я проверить не могу)
да, надо group by t1.ID, ты прав
Что то вроде такого:
SELECT 'ТОВАР', 'ОБУВЬ', 'NIKE'
UNION
SELECT 'ТОВАР','ОДЕЖДА','ADIDAS'
UNION
SELECT 'УСЛУГИ','NULL','NULL'
SELECT L1.LNAME, L2.LNAME, L3.LNAME
FROM LIB L1 LEFT JOIN LIB L2 ON(L1.LID=L2.LPARENT) LEFT JOIN LIB L3 ON(L2.LID=L3.LPARENT)
WHERE L1.LPARENT=0
P.S. Забыл - табличка называется LIB
Оставить комментарий
Selena
1)Условие: Есть табличка TABLE1 с уникальным полем типа integer - ID и полем NAMEЗадача: Вывести все записи таблицы в произвольном порядке, пронумеровав их.
2)Уcловие: есть запрос
Задача: что он делает?
3)Условие: есть табличка
Задача: написать запрос, результат которого будет выглядеть следующим образом: