Как считать данные, где сумма больше, чем х - PullRequest
1 голос
/ 02 февраля 2012

Я очень плохо знаком с SQL и использую SQLite 3 для проведения анализа корзины данных продаж.

Соответствующими столбцами являются идентификатор продукта, уникальный идентификатор транзакции (который идентифицирует корзину) и количество продукта. Если клиент купил более одного типа продукта, повторяется уникальный идентификатор транзакции.

Я хочу подсчитать количество корзин, в которых клиент купил 1 товар.

Пока я пробовал select count(distinct uniqID) from salesdata having sum(qty) = 1;

Но это вызвало ошибку, говорящую a GROUP BY clause is required before HAVING.

Я тогда попробовал select count(distinct uniqID) from salesdata group by uniqID having sum(qty) = 1

SQlite принял это, но вернул мне список всего 1 с, что тоже не правильно!

Я тогда попробовал select count(uniqID) from salesdata group by qty having sum(qty) = 1

SQlite также принял это, но ничего не вернул.

Любые идеи будут высоко оценены!

E

Ответы [ 2 ]

3 голосов
/ 02 февраля 2012

Попробуйте что-то вроде этого, чтобы получить каждого пользователя, у которого в корзине больше или равно одному элементу

select uniqID, sum(qty) as total from salesdata group by uniqID having total >= 1

, если вы хотите, чтобы только пользователи, у которых в корзине 1 элемент, заменяли >=1с =1

вроде:

select uniqID, sum(qty) as total from salesdata group by uniqID having total = 1

Если вы хотите, чтобы количество пользователей с 1 предметом в их корзинах, вы получили это так:

SELECT COUNT(*) FROM (select uniqID, sum(qty) as total from salesdata group by uniqID having total 
= 1)
0 голосов
/ 02 февраля 2012

Выбор количества корзин, в которых есть только один предмет. Это также отфильтрует корзины с количеством больше, чем один на один предмет. Если вы этого не хотите, удалите часть WHERE qty = 1.

  SELECT 
    COUNT(uniqID)    FROM 
    (SELECT 
      uniqID, SUM(qty) AS total 
     FROM 
      salesdata 
     WHERE 
       qty = 1 
     GROUP BY 
       uniqID 
     HAVING 
       total = 1)
...