Czasami nie jesteśmy przekonani na 100% jak działa jakieś polecenie. Nie ma lepszego pomysłu jak wypróbowanie kilku scenariuszy na żywym kodzie. Zachęcam do przeanalizowania poniższego kodu z uwzględnieniem komentarzy:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
--Tworzymy tabelę tymczasową #table CREATE TABLE #table (ID INT IDENTITY(1,1) NOT NULL, ProductName NVARCHAR(20), Color NVARCHAR(20)) --Wstawiamy rekordy do tabeli INSERT INTO #table (ProductName, Color) VALUES ('Product1', 'Red'), ('Product2', 'Light grey'), ('Product3', 'Deep black'), ('Product4', 'Purple'), ('Product1', 'Red'), ('Product2', 'Silver'), ('Product3', 'White'), (NULL, 'Pink'), (NULL, NULL), (NULL, 'Blue') SELECT ProductName, COUNT(*) FROM #table GROUP BY ProductName SELECT ProductName, Color, COUNT(*) FROM #table GROUP BY ProductName, Color --Niepowtarzające się kombinacje wszystkich kolumn SELECT DISTINCT * from #table --Niepowtarzające się nazwy produktu SELECT DISTINCT ProductName FROM #table --Niepowtarzające się kombinacje nazwy produktu i koloru produktu. SELECT DISTINCT ProductName, Color FROM #table --Zliczenie wszystkich rekordów SELECT COUNT(*) FROM #table --Zliczenie wszystkich rekordów SELECT COUNT(1) FROM #table --Zliczenie wszystkich rekordów SELECT COUNT('bnmm bnn bbbnn.. bnm') FROM #table --Zliczenie wszystkich rekordów SELECT COUNT(((9+2000)/2)^4) FROM #table --Zliczenie wszystkich niepustych wartości w kolumnie ProductName --Uwaga! Wartości NULL są pomijane SELECT COUNT(ProductName) FROM #table --Zliczenie wszystkich niepustych niepowtarzających się wartości w kolumnie ProductName --Uwaga! Wartości NULL są pomijane SELECT COUNT(DISTINCT ProductName) FROM #table --Zliczenie wszystkich kombinacji nazwy produktu i koloru produktu. --Np.: SELECT COUNT(DISTINCT CONCAT(ProductName, Color)) FROM #table --Lub: SELECT COUNT(*) FROM ( SELECT DISTINCT ProductName, Color FROM #table ) t |
Zachęcam do odwiedzenia:
http://www.sqlskills.com/blogs/conor/count1-vs-countstar/
http://www.sqlskills.com/blogs/conor/countstar-vs-countcolumn-vs-countdistinct-vs-countcol-over/
Nie zwalniasz Piotrze i chwała Ci za to! Ten kod jest świetnym przykładem co ma (lub nie) wpływ na zapytania i jakie głupoty możemy wyciągnąć z bazy za pomocą źle (czytaj bez dogłębnego zrozumienia działania wynikowego funkcji) napisanego zapytania:)
Tak od siebie: dorzuciłem sobie aliasy w zapytaniach zliczających – łatwiej mi wtedy przypisać zapytanie do wyniku:)
Pzdr
Miało być oczywiście: „łatwiej mi wtedy przypisać wynik do zapytania” – przepraszam, jest późno… 🙂