2014-07-17 3 views
0

ВОПРОСЫ с запросом UNION, где из одной таблицы мне нужен COUNT записей для «Term», где я указываю поля «ID» и «Count».Не получить запрос SQL для UNION, чтобы вернуть правильное значение

ПРИМЕЧАНИЕ Грейдер сортируется, если он подозревает, что используется UNION ALL.

Я пробую несколько разных форматов ... и никто не работает правильно.

------ (версия 1) -------

например,

select count(term) from frequency where (select docid = 
    '10398_txt_earn' where count = '1' UNION select docid = 
    '925_txt_trade' where count = '1'); 

Дает мне "0." Грейдер говорит мне, что «0» неверно.

Если я разделился на две части, я получаю значение для каждого (110 и 225).

------ (версия 2) -------

Я изменил запрос, используя формат здесь:

http://sqlite.1065341.n5.nabble.com/UNION-QUERY-td42629.html

, так что теперь у меня есть для запрос (кстати ... в отличие от того, что предлагает плакат, я должен использовать UNION ... если я не могу использовать UNION ALL, затем выберите уникальные записи ... но это кажется ненужным вычислительном шаг)

select count(term) from (select * from frequency where 
    (docid='10398_txt_earn' and count='1')) 
    UNION 
    select term from (select * from frequency where 
    (docid='925_txt_trade' and count='1')); 

дает мне две линии вывода: строка 1: 110, строка 2: 225

Если я заменил «select count (term)» на «select term» ... Я получаю список, длина которого равна сумме эти два значения выше

------ (версия 3) -------

select (term) from frequency where (select docid = '10398_txt_earn' 
    where count = '1') 
    UNION 
    select (term) from frequency where (select docid = '925_txt_trade' 
    where count = '1'); 

снова дает мне две строки вывода: Строка 1: 110, строка 2: 225

ВОПРОС ??? Как бы вы изменили его, чтобы получить одно значение с подсчетом уникальных общих условий?

+1

отсчет зарезервированное слово .. Я удивлен, что вы можете использовать его в пункте где не избежать его в '[]'. Кроме того, все ли «ТЕРМИНЫ» имеют ненулевое значение? Если ваши подсчеты не совпадают, потому что счетчик не будет считать нулевые поля. Если вы используете 'count (*)' однако, он будет считать все строки независимо от нулевых значений.Наконец, второй запрос кажется, что он должен вернуть то, что вы считаете после того, как count является текстовым полем, docID - текстовыми полями, а термин никогда не является нулевым. – xQbert

+0

«count» выполняет две роли. первый экземпляр, как в «count (term)» является частью запроса ... второй экземпляр, как в «count = '1», является тем, что одно из полей в базе данных называется «count» – MJMV

+0

Оберните '[count] = '1'' в скобках RDBMS может запутаться в функции count vs count. 2-е значение tablename.term имеет нулевые значения? если подсчет нулей не работает. – xQbert

ответ

1

Я хотел бы использовать эту

select count(term) from frequency where docid in ('10398_txt_earn' '925_txt_trade') AND count = '1'; 

Однако, если вам нужно использовать UNION

select sum(termCount) from (
select count(term) termCount from (select * from frequency where 
docid='10398_txt_earn' and count='1' group by term) 
UNION 
select count(term) from (select * from frequency where 
docid='925_txt_trade' and count='1' group by term) 
); 
+0

Я предполагаю, что с UNION предполагается опустить дубликаты в поле «term» ... b/c это сумма обеих частей ... и грейдер говорит мне использовать «union», а не «union all», – MJMV

+0

Истинная, отличная будет делать это тоже. count (особый термин) – bowlturner

+0

Я добавил «отличный», чтобы сделать «select sum (distinct termCount)», но я все равно получаю неправильный ответ. – MJMV

1

Вы ищете отсчету обоих пунктов (где положение) и это нужно также где «count» = '1'? Это звучит прямо ко мне - одно место, где говорится.

SELECT SUM(TermCounts) 
FROM (
    SELECT COUNT(DISTINCT terms) AS TermCounts 
    FROM frequency 
    WHERE docid = '10398_txt_earn' 
     AND "count" = '1' 
    UNION ALL 
    SELECT COUNT(DISTINCT terms) AS TermCounts 
    FROM frequency 
    WHERE docid = '925_txt_trade' 
) CountUnion; 
+0

отредактировал мой ответ. –

+0

Задача состоит в том, чтобы перевести это в запрос: πterm (σdocid = 10398_txt_earn и count = 1 (частота)) U πterm (σdocid = 925_txt_trade и count = 1 (частота)) – MJMV

+0

Но вы хотите получить 1 строку? –

0

получил его ... это работает:

from (
select term 
from frequency 
where docid in ("10398_txt_earn") AND count = '1' 
UNION 
select term 
from frequency 
where docid in ("925_txt_trade") AND count = '1'); 
Смежные вопросы