Sql iscover关系比偶然更常见,但出乎意料(在本例中,假设大量膳食是由打字机旁的猴子制作的),这确实是一个很好的信息。我认为OP想要使用像corr()这样的函数的原因是,他可以将它应用于整个数据集,而不仅仅是一个成分。@James Oh;事实上,这是一个非
Sql iscover关系比偶然更常见,但出乎意料(在本例中,假设大量膳食是由打字机旁的猴子制作的),这确实是一个很好的信息。我认为OP想要使用像corr()这样的函数的原因是,他可以将它应用于整个数据集,而不仅仅是一个成分。@James Oh;事实上,这是一个非,sql,oracle,statistics,Sql,Oracle,Statistics,iscover关系比偶然更常见,但出乎意料(在本例中,假设大量膳食是由打字机旁的猴子制作的),这确实是一个很好的信息。我认为OP想要使用像corr()这样的函数的原因是,他可以将它应用于整个数据集,而不仅仅是一个成分。@James Oh;事实上,这是一个非常好的观点。概括我的“奶酪”表,使其不必称为“奶酪”,这将是一个有趣的练习,但我将等待OP的消息。是的,我计划让它在整个数据集上运行。@owook我提取了奶酪;最后一个查询应该为您提供可以使用任何统计方法的信息。我给出了一个简单的计分机制,但你
iscover关系比偶然更常见,但出乎意料(在本例中,假设大量膳食是由打字机旁的猴子制作的),这确实是一个很好的信息。我认为OP想要使用像corr()这样的函数的原因是,他可以将它应用于整个数据集,而不仅仅是一个成分。@James Oh;事实上,这是一个非常好的观点。概括我的“奶酪”表,使其不必称为“奶酪”,这将是一个有趣的练习,但我将等待OP的消息。是的,我计划让它在整个数据集上运行。@owook我提取了奶酪;最后一个查询应该为您提供可以使用任何统计方法的信息。我给出了一个简单的计分机制,但你应该使用最适合你的方法。一本好的读物可能是当你在考虑如何对这些对进行排序时。
MEAL_NUM INGREDIENT
--------------------
1 BEEF
1 CHEESE
1 PASTA
2 CHEESE
2 PASTA
2 FISH
3 CHEESE
3 CHICKEN
select t1.INGREDIENT, count(*)a
from table t1,
(select meal_num
from table
where INGREDIENT = 'CHEESE') t2
where t1.INGREDIENT <> 'CHEESE'
and t1.meal_num=t2.mealnum
group by t1.INGREDIENT;
SELECT Other.Ingredient,
COUNT(*) AS TotalMeals,
COUNT(Cheese.Ingredient) AS CheesyMeals
FROM table Other
LEFT JOIN table Cheese
ON (Cheese.Ingredient = 'Cheese'
AND Cheese.Meal_Num = Other.Meal_Num)
GROUP BY Other.Ingredient
SELECT First.Ingredient,
Second.Ingredient,
COUNT(*) AS MealsWithFirst,
COUNT(First.Ingredient) AS MealsWithBoth,
COUNT(First.Ingredient) / (COUNT(*) + 3) AS PossibleScore,
FROM table First
LEFT JOIN table Second
ON (First.Meal_Num = Second.Meal_Num)
GROUP BY First.Ingredient, Second.Ingredient
PASTA CHEESE 2 2 0.400
CHEESE PASTA 3 2 0.333
BEEF CHEESE 1 1 0.250
BEEF PASTA 1 1 0.250
FISH CHEESE 1 1 0.250
FISH PASTA 1 1 0.250
CHICKEN CHEESE 1 1 0.250
PASTA BEEF 2 1 0.200
PASTA FISH 2 1 0.200
CHEESE BEEF 3 1 0.167
CHEESE FISH 3 1 0.167
CHEESE CHICKEN 3 1 0.167
SELECT t1.INGREDIENT, t2.INGREDIENT, CORR(t1.MEAL_NUM, t2.MEAL_NUM)
FROM TheTable t1, TheTable t2
WHERE t1.INGREDIENT < t2.INGREDIENT
GROUP BY t1.INGREDIENT, t2.INGREDIENT
BEEF CHEESE 0.999
BEEF PASTA 0.998
CHEESE PASTA 0.977
--Create sample data
create table meals(meal_num number, ingredient varchar2(10));
insert into meals
select 1, 'BEEF' from dual union all
select 1, 'CHEESE' from dual union all
select 1, 'PASTA' from dual union all
select 2, 'CHEESE' from dual union all
select 2, 'PASTA' from dual union all
select 2, 'FISH' from dual union all
select 3, 'CHEESE' from dual union all
select 3, 'CHICKEN' from dual;
commit;
--Create nested table type to hold results
CREATE OR REPLACE TYPE fi_varchar_nt AS TABLE OF VARCHAR2(10);
/
--Find the items most frequently combined with CHEESE.
select bt.setid, nt.column_value, support occurances_of_itemset
,length, total_tranx
from
(
select
cast(itemset as fi_varchar_nt) itemset, rownum setid
,support, length, total_tranx
from table(dbms_frequent_itemset.fi_transactional(
tranx_cursor => cursor(select meal_num, ingredient from meals),
support_threshold => 0,
itemset_length_min => 2,
itemset_length_max => 2,
including_items => cursor(select 'CHEESE' from dual),
excluding_items => null))
) bt,
table(bt.itemset) nt
where column_value <> 'CHEESE'
order by 3 desc;
SETID COLUMN_VAL OCCURANCES_OF_ITEMSET LENGTH TOTAL_TRANX
---------- ---------- --------------------- ---------- -----------
4 PASTA 2 2 3
3 FISH 1 2 3
1 BEEF 1 2 3
2 CHICKEN 1 2 3