SQL Где существует только 1 указанная c строка - PullRequest
0 голосов
/ 25 февраля 2020

Если у меня есть таблица ниже под названием Sales, как можно создать запрос SQL, чтобы получить данные для транзакций, в которых было продано только chocolate.

Требуемый и ожидаемый результат будет (только идентификаторы транзакций 1 и 4):

enter image description here

Спасибо

Ответы [ 4 ]

0 голосов
/ 25 февраля 2020

выбор количества (), транзакция_id, где Item = группа «Шоколад» по транзакции с идентификатором () = 1;

0 голосов
/ 25 февраля 2020

Попробуйте что-то вроде этого

SELECT COUNT(*) as TransactionID, SUM(SaleValue)
FROM TableName t1
WHERE Item = 'Chocolate' 
      AND NoT EXISTS (SELECT 1 
                      FROM TableName t2 
                      WHERE t1.TransactionID = t2.TransactionID AND t2.Item <> 'Chocolate')
0 голосов
/ 25 февраля 2020

Вы хотите транзакции, где шоколад был продан, но ничего больше. Декларативный способ сделать это будет:

SELECT 
    COUNT(*) AS [Transaction ID Count], 
    SUM([Sales Value]) AS [Sales Value]
FROM Sales
WHERE Item = 'Chocolate' 
AND [Transaction ID] NOT IN
(
SELECT [Transaction ID]  FROM Sales
WHERE Item <> 'Chocolate' 
)
0 голосов
/ 25 февраля 2020

В вашем примере есть три транзакции, где шоколад был продан, при этом данные будут извлечены из 3 строк.

select count(transaction_ID), sum(sales_value) from sales
where item  =  'Chocolate';

или это исключает идентификатор транзакции 3

select count(transaction_ID), sum(sales_value) from sales s1
where item  =  'Chocolate'
and transaction in
(select transaction id from  
(select transaction_id, count(*) cnt from sales)
where cnt =1)
...