loading..
Русский    English
20:33
листать

Нумерация строк в соответствии с порядком, заданном значениями первичного ключа стр. 2

Несколько усложним задачу, и попытаемся пронумеровать модели каждого производителя отдельно. Воспользуемся предыдущим решением, и внесем в него следующие изменения:

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

Консоль
Выполнить
  1. SELECT COUNT(*) no, P2.model
  2.     FROM Product P1 JOIN
  3.      Product P2 ON P1.maker =P2.maker AND P1.model <= P2.model
  4.     GROUP BY P2.model
  5.     ORDER BY P2.model;

В принципе, это и все. Правда, результат не отличается наглядностью.

2. Добавим в вывод производителя, при этом все равно из какой таблицы мы его возьмем в силу равенства. Однако тогда необходимо добавить производителя в столбцы группировки (MySQL не в счет):

Консоль
Выполнить
  1. SELECT COUNT(*) no, P1.maker, P2.model
  2.     FROM Product P1 JOIN
  3.     Product P2 ON P1.maker =P2.maker AND P1.model <= P2.model
  4.     GROUP BY P1.maker, P2.model
  5.     ORDER BY P2.model;

3. Ну и, наконец, добавим сортировку для наглядности результата. Столбец maker должен быть первым столбцом сортировки, чтобы каждая группа выводилась отдельно.

Консоль
Выполнить
  1. SELECT COUNT(*) no, P1.maker, P2.model
  2.     FROM Product P1 JOIN
  3.     Product P2 ON P1.maker =P2.maker AND P1.model <= P2.model
  4.     GROUP BY P1.maker, P2.model
  5.     ORDER BY P1.maker, P2.model;

no    maker    model
1    A    1232
2    A    1233
3    A    1276
4    A    1298
5    A    1401
6    A    1408
7    A    1752
1    B    1121
2    B    1750
1    C    1321
1    D    1288
2    D    1433
1    E    1260
2    E    1434
3    E    2112
4    E    2113

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

Ранжирующие функции, естественно, упрощают запрос:

Консоль
Выполнить
  1. SELECT ROW_NUMBER() OVER(PARTITION BY maker ORDER BY model) no, maker, model
  2.     FROM Product
  3.     ORDER BY maker, model;

Bookmark and Share
Страницы: 1 2
Тэги:
ALL AND AUTO_INCREMENT AVG battles CASE CAST CHAR CHARINDEX CHECK classes COALESCE CONSTRAINT Convert COUNT CROSS APPLY CTE DATEADD DATEDIFF DATENAME DATEPART DATETIME DDL DEFAULT DELETE DISTINCT DML EXCEPT EXISTS EXTRACT FOREIGN KEY FROM FULL JOIN GROUP BY Guadalcanal HAVING IDENTITY IN INFORMATION_SCHEMA INNER JOIN insert INTERSECT IS NOT NULL IS NULL ISNULL laptop LEFT LEFT OUTER JOIN LEN maker Больше тэгов
Учебник обновлялся
месяц назад
https://exchangesumo.com/obmen/ACCRUB-PRRUB-sort . Правильное измерение вертикальных углов теодолитом
©SQL-EX,2008 [Развитие] [Связь] [О проекте] [Ссылки] [Team]
Перепечатка материалов сайта возможна только с разрешения автора.