увеличивая счет в sql - PullRequest
       0

увеличивая счет в sql

0 голосов
/ 31 марта 2020

В настоящее время я работаю над заданием для моего SQL класса, и у меня возникли небольшие проблемы. Для одной части моего задания он спрашивает: «Подсчитайте количество существующих заказов и перечислите все данные заказов в порядке убывания, начиная с самой последней даты заказа». Я могу использовать функцию подсчета, а также могу отображать все данные, но отдельно. Когда я пытаюсь выполнить запрос со всем кодом вместе, он отображает все данные, но для счетчика он показывает 9 строк по 1, когда счет должен равняться 9. code

SELECT COUNT(ORDER_NUMBER), ORDER_NUMBER, ORDER_DATE, CUSTOMER_NUMBER
FROM ORDERS
GROUP BY ORDER_NUMBER, ORDER_DATE, CUSTOMER_NUMBER
ORDER BY ORDER_DATE DESC

enter image description here

Ответы [ 2 ]

2 голосов
/ 31 марта 2020

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

Это означает, что вам нужно либо иметь два запроса, один, который группирует, и другой, который дает детали, а затем объединить их вместе:

SELECT * 
FROM
  orders o
  INNER JOIN
  (SELECT count(*) as ct FROM orders GROUP BY customer_number) g
  ON o.customer_number = g.customer_number

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

SELECT 
  o.*,
  COUNT(*) OVER(PARTITION BY customer_number) as ct
FROM
  orders o

Примечание; Я понятия не имею, на какие столбцы вы действительно хотите рассчитывать и группировать; Я выбрал номер клиента здесь, потому что я знаю, что он существует - эти запросы дадут количество заказов для каждого клиента плюс все детали их. Ваша основная методика использования GROUP BY * состоит в том, чтобы выбрать столбцы, для которых вы хотите подсчитать каждый уникальный вариант (например, если вы хотите узнать, сколько сотрудников на отдел вы сгруппируете по Department_id, потому что, если 50 сотрудников разделены поровну. в 10 отделах в столбце Department_id должно быть 10 различных чисел, каждое из которых повторяется 5 раз - GROUP BY выдаст результирующий набор из 10 строк по одной для каждого отдельного идентификатора отдела, а COUNT - 5 в каждой строке, потому что это количество строк. раньше были свернуты в одну строку)

Если вы хотите, например, подсчитать все заказы в системе, вы можете сделать:

SELECT * 
FROM
  orders o
  CROSS JOIN
  (SELECT count(*) as ct FROM orders) g

Мы должны использовать перекрестное соединение здесь, потому что мы не у нас больше нет столбцов, к которым мы присоединяемся - подзапрос просто вычисляет один результат, который мы хотим отобразить в каждой строке, и именно это делает перекрестное соединение: соединяет каждую строку слева с каждой строкой справа

SELECT 
  o.*,
  COUNT(*) OVER() as ct
FROM
  orders o

Также обратите внимание, что ваше задание требует ро WS для вывода в определенном порядке. Я не выполнил эту часть, но оставлю это как упражнение для вас - не забывайте это, потому что это часть спецэффекта c и будет помечено

0 голосов
/ 31 марта 2020

используйте " count (*) ORDER_NUMBER " вместо того, что вы используете

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...