2014-09-12 4 views
-1

, поэтому я пытаюсь сделать простое разделение и, конечно, SQL, будучи супер-логичным, что это так, делает невозможным. Что я пытаюсь сделать, так это:Попытка разделить два счета в SQL

SELECT * FROM 
1 - ((SELECT COUNT(DISTINCT T.DID) FROM TGAMAZING T AS NUM) * 100/
(SELECT COUNT(DISTINCT D.ID) FROM DIRECTORS D AS DENOM)) 

но как бы я написал этот SQL (Oracle)?

+2

это оракул или SQL-сервер? – Kritner

+0

используйте пример строки или 2, а также пример вывода, который вы хотите – Jay

+0

Если вы ищете SELECT, в котором нет FROM TABLE в Oracle (например, разрешения MS SQL Server), просто используйте 'SELECT ... FROM DUAL' (да , «dual» делает трюк). –

ответ

4

Oracle

SQL Скрипки: http://sqlfiddle.com/#!4/34298/8

Метод 1:

SELECT 1 - (COUNT(DISTINCT DID) * 100/COUNT(DISTINCT ID)) 
FROM TGAMAZING 
cross join DIRECTORS; 

Метод 2:

SELECT 1 - 
    (
     (SELECT COUNT(DISTINCT DID) FROM TGAMAZING) * 100/
     (SELECT COUNT(DISTINCT ID) FROM DIRECTORS) 
    ) 
FROM DUAL; 

SQL Server

SQL Скрипки: http://sqlfiddle.com/#!6/34298/3

Метод 1

SELECT 1 - (COUNT(DISTINCT DID) * 100.0/COUNT(DISTINCT ID)) 
FROM TGAMAZING 
cross join DIRECTORS; 

Метод 2

SELECT 1 - 
    (
     (SELECT COUNT(DISTINCT DID) FROM TGAMAZING) * 100.0/
     (SELECT COUNT(DISTINCT ID) FROM DIRECTORS) 
    ) 
2

Напишите как бы поля вычисления и используйте «FROM DUAL», так как вы не хотите запрашивать какие-либо из ваших таблиц.

SELECT 
    1 - ((SELECT COUNT(DISTINCT T.DID) FROM TGAMAZING T) * 100/
    (SELECT COUNT(DISTINCT D.ID) FROM DIRECTORS D)) 
    AS RESULT 
FROM DUAL 

Код: Selecting from the DUAL Table.

+0

Я не думаю, что вы можете иметь '... AS NUM' и' ... AS DENOM', где у вас их есть. –

+0

@BobJarvis Меня тоже нет :-) Отредактировано. Благодарю. –