Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да върнете броя на редовете в резултат от заявка в SQL Server

Когато работите с бази данни, понякога искате да разберете колко реда ще бъдат върнати от заявка, без всъщност да връщате резултатите от заявката. Или понякога може просто да искате да разберете колко реда има в дадена таблица.

В SQL Server можете да използвате COUNT() на T-SQL функция за връщане на броя на редовете, които биха били върнати в заявка.

Данните

Ето данните, които ще използваме в примерите на тази страница:

ИЗБЕРЕТЕ *ОТ задачи;

Резултат:

TaskId TaskName TaskDescription TaskCode------ ------------ --------------- --------1 Емисия котки TBA null 2 ​​Водно куче TBA null 3 Хранене в градината TBA null 4 Боядисване на килим TBA null 5 Чист покрив TBA null 6 Хранене на котки TBA null 

Пример – Пребройте всички редове в таблица

Ето пример за използване на COUNT() функция за връщане на общия брой редове в таблица:

ИЗБЕРЕТЕ БРОЙ(*)ОТ задачи;

Резултат:

6 

Това връща броя на редовете в таблицата, защото не сме предоставили никакви критерии за стесняване на резултатите.

Пример – Добавяне на критерии

Ето пример за преброяване на колко реда ще бъдат върнати въз основа на даден критерий:

ИЗБЕРЕТЕ БРОЙ(*) ОТ задачи, КОЕТО Име на задача КАТО '%dog%' ИЛИ ​​TaskName КАТО '%cat%';

Резултат:

3

Пример – Посочете една колона

Всички предишни примери използват звездичка за прилагане на броя към всички колони. Имате и опцията да посочите конкретна колона.

Пример:

ИЗБЕРЕТЕ БРОЙ (име на задача) ОТ задачи;

Резултат:

6

Въпреки че този пример връща същия резултат, който получихме, когато използвахме звездичката, това не винаги ще е така. Например, ето какво се случва, ако посочим различна колона:

ИЗБЕРЕТЕ БРОЙ(Код на задача) ОТ задачи;

Резултат:

0

В този случай получаваме нула, защото тази конкретна колона съдържа нулеви стойности във всеки ред.

Пример – Различен

Можете да добавите DISTINCT аргумент за връщане само на броя уникални (ненулеви) стойности.

Може да сте забелязали, че всеки ред в нашия TaskDescription колоната съдържа същата стойност („TBA“). И TaskName колоната също има дублирана стойност („Feed cats“ се появява два пъти). Това може да доведе до проблеми, ако не искате дубликатите да се броят.

Ето как изглежда, ако приложим DISTINCT аргумент към TaskName колона:

ИЗБЕРЕТЕ БРОЙ(DISTINCT TaskName)ОТ задачи;

Резултат:

5

И тук се прилага срещу TaskDescription таблица (където всички стойности са идентични):

ИЗБЕРЕТЕ БРОЙ(ОТЛИЧЕН Описание на задача) ОТ задачи;

Резултат:

1

Пример – Клауза HAVING

Можете също да използвате COUNT() с HAVING клауза за ограничаване на набор от резултати въз основа на броя на редовете, които ще бъдат върнати.

Пример:

ИЗПОЛЗВАЙТЕ музика;ИЗБЕРЕТЕ ar.ArtistName, COUNT(al.AlbumName) 'Album Count'FROM Изпълнители arINNER JOIN Албуми al ON ar.ArtistId =al.ArtistIdGROUP BY ar.ArtistNameHAVING COUNT(al.AlbumName)> 1; предварително> 

Резултат:

ArtistName Album Count------------------------ -----------Allan Holdsworth 2 Devin Townsend 3 Iron Maiden 5 Майкъл се научава да рок 3 Том Джоунс 3

Този пример използва различна база данни от предишните примери. Връща се само онези изпълнители, които са издали повече от 1 албум. Можем да променим този брой, колкото и албума, който пожелаем:

ИЗПОЛЗВАЙТЕ музика;ИЗБЕРЕТЕ ar.ArtistName, COUNT(al.AlbumName) 'Album Count'FROM Изпълнители arINNER JOIN Албуми al ON ar.ArtistId =al.ArtistIdGROUP BY ar.ArtistNameHAVING COUNT(al.AlbumName)> 4; предварително> 

Резултат:

Име на изпълнителя Брой албуми--------------------- -----------Iron Maiden 5

Функцията COUNT_BIG()

T-SQL също има COUNT_BIG() функция, която работи точно като COUNT() , с изключение на това COUNT() връща int тип данни и COUNT_BIG() връща bigint тип данни.

Тази функция може да бъде полезна за индексирани изгледи с групирани заявки. Може да откриете, ако се опитате да създадете индекс за изглед, който съдържа COUNT(*) , че получавате грешка като тази:

Не може да се създаде индекс на изглед „Music.dbo.AlbumsByArtist“, защото използва обобщения COUNT. Вместо това използвайте COUNT_BIG.

В такива случаи промяна на изгледа за използване на COUNT_BIG(*) трябва да реши проблема.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да изпратите HTML имейл от SQL Server (T-SQL)

  2. изолиране на подниз в низ преди символ в SQL Server 2008

  3. Тригери на SQL Server – Част 2 DDL &LOGON тригери

  4. Как да изберете подмножество от колони от набора от резултати на съхранена процедура (T-SQL)

  5. Какви са някои начини за достъп до Microsoft SQL Server от Linux?