Информация об отдельных пользователях и запрос количества записей, ограниченный

У меня есть две таблицы: таблицы User_Id и Shopping:

Shopping Table (10000 records)
----------------------------
User_Id | Purchased_Items_Id
1       | 1
1       | 2
2       | 4
2       | 6
....

User_Id Table (7000 records)
-------------
User_Id
1
2
3
....

My_Desired table
 User_Id | Purchased_Items_Id
    1       | 1
    2       | 4
    2       | 6
   .....

Таблица My_Desired должна содержать 7000 отдельных пользователей, а общее количество записей в ней должно быть 8000.

Торговый стол является основным столом. Таблица My_Desired должна содержать 7000 отдельных пользователей, а общее количество записей в ней должно быть 8000. Выберите 8000 случайных записей из таблицы Shopping, и она будет содержать все отдельные User_Id хотя бы один раз.

INSERT INTO MY_SHOP
( SELECT S.* FROM Shopping S WHERE User_Id IN (SELECT * FROM  User_Id) AND  ROWNUM<=8000);

Этот код возвращает 8000 записей, но количество различных User_Id меньше 7000.

Как я мог это исправить?

На самом деле нет никакой другой информации о покупках


person user951487    schedule 12.12.2011    source источник
comment
о, теперь я понял. Я опубликую ответ.   -  person Florin Ghita    schedule 12.12.2011


Ответы (3)


Этот запрос вернет случайную информацию о 8000 покупках, но будет содержать все 7000 пользователей.

select * FROM(

    SELECT user_id,  
         Purchased_Items_Id,
         row_number() over (partition by user_id order by dbms_random.value) as rnk
    FROM 
          USER_ID join Shopping using(user_id) 
    ORDER BY rnk

)

where rownum <= 8000
person Florin Ghita    schedule 12.12.2011
comment
Этот запрос вернет случайную информацию о 8000 покупках, но будет содержать все 7000 пользователей. именно так и хочу! сейчас попробую - person user951487; 12.12.2011

Ваше желание не ясно. Я полагаю, вам нужно 8000 случайных пользователей и немного информации из магазина...

select user_id, 
       first_value(Purchased_Items_Id) over (partition by user_id) some_info --some shopping info
       wm_concat (Purchased_Items_Id) all_info -- all info
from 
   (select user_id, rownum rn
    from User_id
    ORDER BY dbms_random.value
    )
    join Shopping using(user_id)
where rn <= 8000

Что вы хотите видеть во втором столбце? какая информация о покупках?

person Florin Ghita    schedule 12.12.2011

Я думаю, что вы использовали ключевое слово DISTINCT:

INSERT INTO MY_SHOP
(SELECT S.Purchased_Items_Id, DISTINCT(S.User_Id) FROM Shopping S WHERE User_Id IN (SELECT * FROM User_Id) AND ROWNUM<=8000);

Но я думаю, что подзапрос в данном случае не нужен, так как в этом SELECT нет ограничений.

person Jan Marek    schedule 12.12.2011