2013-12-06 5 views
1

Я использую SQL Server У меня есть 2 таблицы:получение математической операции результата буксировки в SQL

Table1: для покупки данных данных {ITEM_ID, цена, ...} table2 для данных shopingcart (ITEM_ID, даты и времени , ...)

Как найти вероятность покупки, равную = number_of_item_in table2/number_of_item_in table 1;

что лучше:

use : 
set count1=(select count(*) from table1) 
set count2=(select count(*) from table2) 
and print count2/count1; 

or by something like : 

select c2/c1 as probability from 
(
select count(*) as c1 from Table1 , select count(*) as c2 from table2) 

) 

, пожалуйста, какой из них является более эффективным.

+0

Я думаю, что они должны быть почти такими же. Вы сравнили планы выполнения? –

ответ

2

Если вы рассматриваете намерение кода, то они по существу эквивалентны. Вопрос в том, хотите ли вы использовать T-SQL с переменными или просто поместить все в один оператор. Одной из причин использования переменных является то, что вы снова будете использовать значения.

Некоторые замечания по синтаксису:

Они оба возвращают 0 или 1, поскольку SQL Server выполняет целочисленное деление.

Первое синтаксически неверно. Вы должны использовать:

declare @count1 float = (select count(*) from table1); 
declare @count2 float = (select count(*) from table2); 
print count2/count1; 

Кроме того, второе синтаксически неверно. Вот правильная версия:

select c2/c1 as probability 
from (select cast(count(*) as float) as c1 from Table1) c1 cross join 
    (select count(*) as c2 from table2) c2; 
+0

+1 Хороший ответ. –

+0

, поэтому из них гораздо более эффективны – Maria

Смежные вопросы