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

Премахване на дубликати от Count() Results в SQLite

Когато използвате count() функция в SQLite, може да се окажете в ситуация, в която искате да броите само различни стойности. Това означава, че не искате дублиращи се стойности да се броят няколко пъти.

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

По подразбиране count() ще включи всички дублиращи се стойности в своето изчисление. Например, ако стойността “Cat” се появи 3 пъти, count() ще отчита това за 3.

Ако обаче искате да се отчитат само различни стойности, тогава count() ще го брои за 1.

За щастие има лесен начин да направите това. Всичко, което трябва да направите, е да добавите DISTINCT ключова дума към вашия count() функция. Като това:

count(DISTINCT x)

Където x е името на колоната, чието съдържание броите (или целия ред, ако използвате заместващия знак звездичка).

Пример

Вземете следната таблица:

ProductId   ProductName    Price     
----------  -------------  ----------
1           Widget Holder  139.5     
2           Blue Widget    10.0      
3           Red Widget     10.0      
4           Green Widget   10.0      
5           Widget Stick   89.75     
6           Foo Cap        11.99     

Забележете, че всички редове от 2 до 4 имат една и съща цена (10.0).

Ако направя нормален count() на Цена колона, ще преброи всичките шест реда.

SELECT count(Price) FROM Products;

Резултат:

6

Въпреки това, ако добавя DISTINCT ключова дума, тя ще отчита тези три реда като един.

SELECT count(DISTINCT Price) FROM Products;

Резултат:

4

Преброяване на отделни редове

count() функцията приема заместващия знак звездичка (* ), което означава, че ще брои всички редове.

Вероятно обаче ще получите грешка, ако се опитате да използвате DISTINCT когато използвате заместващия знак за звездичка.

Ето таблица с дублиращи се редове.

Postal      State             
----------  ------------------
NSW         New South Wales   
NSW         New South Wales   
QLD         Queensland        
TAS         Tasmania          
SA          South Australia   
WA          Western Australia 
VIC         Victoria          

На теория би трябвало да мога да използвам DISTINCT за да преброите „де-дупираните“ редове в тази таблица. Това обаче не изглежда възможно.

SELECT count(DISTINCT *)
FROM States;

Резултат:

Error: near "*": syntax error

Вместо това трябва да посоча име на колона, когато използвам DISTINCT ключова дума.

SELECT 
  count(State),
  count(DISTINCT State)
FROM States;

Резултат:

count(State)  count(DISTINCT State)
------------  ---------------------
7             6                    

Друг начин да го направите е да направите нещо подобно:

SELECT count(*) FROM (SELECT DISTINCT * FROM States);

Резултат:

6

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQLite Node.js

  2. Актуализирайте всички редове в колона до нова стойност

  3. Актуализиране на данните за дейността от услугата, когато е на пауза

  4. Как да вмъкнете изображение в библиотеката за постоянство на стаята?

  5. Как да коригирам URL адреса на доставчика на съдържание, който не е намерен в доставчика на съдържание за Android?