Как последовательно считать последовательность чисел

Мне нужно ВЫБРАТЬ и СЧИТАТЬ количество идентификаторов OrderID, которые получили скидку 10%.

Я пытался использовать функцию COUNT, но она подсчитывает только одно уникальное вхождение сущности, а не для каждого из идентификаторов OrderID.

USE Northwind
GO

SELECT a.OrderID, COUNT(a.OrderID) as 'SeqNo', b.ProductName, a.UnitPrice, a.Quantity, a.UnitPrice*a.Quantity as Amount, a.Discount
FROM [Order Details] as a
INNER JOIN [Products] as b
ON a.ProductID = b.ProductID
GROUP BY a.OrderID, b.ProductName, a.UnitPrice, a.Quantity, a.Discount
HAVING a.Discount = 0.1

На самом деле я хочу, чтобы «SeqNo» СЧИТАЛ OrderID, но вместо этого все они равны 1.

  OrderID SeqNo       ProductName      UnitPrice Quantity Amount Discount
1  10288  | 1  | Tourtiere             | 5.9    |  10 |   59.00  | 0.1
2  10288  | 2  | Scottish Longbreads   | 10     |  3  |   30.00  | 0.1
3  10291  | 1  | Konbu                 | 4.8    |  20 |   96.00  | 0.1
3  10291  | 2  | Gula Malacca          | 15.5   |  24 |   372.00 | 0.1
3  10291  | 3  | Mankimup Dried Apples | 42.4   |  2  |   84.8   | 0.1

Вы используете группу с 5 разными столбцами, поэтому она будет проверять таблицу на наличие дубликатов (комбинация 5 столбцов, упомянутых в группе «По»). Тем не менее, он вернет все записи, как вы показали выше. Если вам нужен подсчет, вам следует сгруппировать по идентификатору заказа и соответственно суммировать цену за единицу и количество, чтобы получить правильный результат.

Mahavir Kumbharvadia 09.04.2019 11:35
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
1
61
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Вы можете использовать ROW_NUMBER вместо COUNT в этом отношении:

USE Northwind
GO

SELECT a.OrderID
, ROW_NUMBER() OVER(ORDER BY a.OrderID ASC) AS 'SeqNo'
, b.ProductName
, a.UnitPrice
, a.Quantity
, a.UnitPrice*a.Quantity as Amount
, a.Discount
FROM [Order Details] as a
INNER JOIN [Products] as b
ON a.ProductID = b.ProductID
GROUP BY a.OrderID, b.ProductName, a.UnitPrice, a.Quantity, a.Discount
HAVING a.Discount = 0.1

Подробнее о ROW_NUMBER : https://docs.microsoft.com/fr-fr/sql/t-sql/functions/номер-строки-транзакции-sql?view=sql-server-2017

Ответ принят как подходящий

Вам нужно использовать функцию row_number() с частями partition by и order by как

row_number() over (partition by OrderID  order by OrderID ) as SeqNo

начинать с 1 для каждого подсчета различных OrderID

вам нужно количество различных заказов?

select Count(distinct OrderID) from [Order Details] where Discount=0.1

Если вы хотите количество таких скидок на заказ, то вы хотите:

SELECT od.OrderID, COUNT(*) as num_discounts
FROM [Order Details] od
WHERE od.Discount = 0.1
GROUP BY od.OrderID;

Если вы хотите количество заказов с такой скидкой в ​​любой строке заказа:

SELECT COUNT(DISTINCT od.OrderID)
FROM [Order Details] od
WHERE od.Discount = 0.1;

Я не уверен, почему вы включили другие столбцы в SELECT, чтобы ответить на этот вопрос.

Другие вопросы по теме