2016-01-30 3 views
0

Я ищу, чтобы заказать список ключей, основанный на количестве заказов, размещенных из базы данных, содержащей запросы на заказ. В принципе, на столе, назовите его заказы (o_partkey, o_returnflag) Я пытаюсь получить общее количество возвратов для каждого заказа. Я пробовал много вариаций следующего фрагмента кода с целью returnlist схемы (partkey, numreturns):База данных SQLite3 условное суммирование

select O.o_partkey as partkey, 
    count(case when O.o_returnflag = 'R' then 1 else 0 end) as numreturns 
from orders O 
orderby quantity_returned desc; 

Я новичок в SQLite и я просто прыгаю в основы. Это настройка домашнего задания (актуальный вопрос более сложный), но я упростил вопрос, который у меня есть.

+0

Как идентифицированный заказом? Часть - это не порядок, не так ли? –

ответ

0

Рассмотрим с помощью производной таблицы подзапроса с SUM() как агрегатной функции:

SELECT dT.partkey, dT.numreturns 
FROM 
    (SELECT O.o_partkey as partkey, 
     SUM(CASE WHEN O.o_returnflag = 'R' THEN 1 ELSE 0 END) as numreturns  
    FROM [ORDER] O 
    GROUP BY O.o_partkey) AS dT 
ORDER BY dT.numreturns DESC; 

Обязательно к кронштейну имя таблицы, как [ORDER] является SQLite key word.

0

Ваша проблема в том, что COUNT насчитывает строк, поэтому он имеет значение как 0, так и 1.

Вы не заинтересованы в каких-либо других строках, так что вы можете отфильтровать возвращения с WHERE:

SELECT o_partkey AS partkey, 
     COUNT(*) AS numreturns 
FROM orders 
WHERE o_returnflag = 'R' 
ORDER BY 2 DESC;