Perché non è possibile utilizzare count(distinct *)
in SQL? Come per contare tutte le righe distinte?Conteggio SQL (*) e distinto
risposta
select count(*) from (select distinct * from MyTable) as T
Anche se ti suggerisco vivamente di ri-pensare qualsiasi query che utilizzano DISTINCT
. In una grande percentuale di casi, GROUP BY
è più appropriato (e più veloce).
EDIT: Dopo aver letto le osservazioni di domanda, vorrei sottolineare che si dovrebbe mai chiedere ai DBMS di fare più lavoro di quanto in realtà deve fare per ottenere un risultato. Se sai in anticipo che non ci saranno righe duplicate in una tabella, non utilizzare DISTINCT
.
@CHristian - ciao, mai visto prima. per curiosità lo ho eseguito con una tabella esistente sulla mia estremità e ho trovato 'sintassi errata vicino') ''. funziona nel ms sql server? nota - la mia selezione tra parentesi scorre perfettamente – Kamal
Su Oracle DISTINCT e GROUP BY hanno lo stesso piano di esecuzione perché DISTINCT è implementato utilizzando GROUP BY. Quindi non ci dovrebbero essere differenze. –
@Kamal: Scusa, ho dimenticato che SQL Server è un po 'incerto con le query nidificate. L'aggiunta di un nome alias alla fine ('as T') ha risolto il problema. –
Si può davvero.
Se hai un identificatore, però, non avrai righe completamente distinte. Ma si potrebbe fare per esempio:
SELECT COUNT(DISTINCT SenderID) FROM Messages
è possibile selezionare tutte le colonne della tabella e di gruppo da ...
SELECT column1, column2, column3, count(*)
FROM someTable
GROUP BY column1, column2, column3
perché non
Questo in realtà non ottiene quello che la domanda chiede però. –
?
select
count(distinct name)
from
people
Perché due persone potrebbero avere lo stesso nome. L'OP ha chiesto informazioni su COUNT (DISTINCT *). –
Mi dispiace, era un altro testo nella domanda quando ho risposto. – silent
UberKludge, e può essere Postgre specifica, ma
select count(distinct table::text) from table
Si può provare un CTE in SQL Server 2005
;WITH cte AS (
SELECT DISTINCT Val1,Val2, Val3
FROM @Table
)
SELECT COUNT(1)
FROM cte
Per rispondere alla domanda, Dalla documentazione
Specifica che tutte le righe devono essere contate per restituire il numero totale di righe in un tavolo. COUNT () non utilizza i parametri e non può essere utilizzato con DISTINCT. COUNT () non richiede un parametro di espressione perché, con la definizione , non utilizza le informazioni su alcuna colonna particolare . COUNT (*) restituisce il numero di righe in una tabella specificata senza eliminando i duplicati. Conta ogni riga separatamente. Ciò include le righe che contengono valori nulli.
Quando dici "Dalla documentazione" quale documentazione sarebbe? –
Documentazione della Guida di SQL Server. http://msdn.microsoft.com/en-us/library/ms175997.aspx –
COUNT (*) è il numero di righe corrispondenti a una query.
Una riga contiene informazioni univoche come il rowid. Tutte le righe sono per definizione distinte.
È necessario contare le istanze distinte dei valori in alcuni campi.
Perché una riga contiene informazioni univoche? Non deve ... probabilmente dovrebbe ma non è * richiesto *. – Murph
alcuni languajes potrebbero non essere in grado di gestire 'distinto *' così, se si desidera la distinzione fatta attraverso molte colonne, si potrebbe voler usare 'distinta colonna A || Colonna B ', combinando i valori prima di giudicare se sono diversi. Tieni presente se le tue variabili sono numeriche e il tuo gestore di database può eseguire un typecast automatico sulle stringhe di caratteri.
Anche questo non è un metodo a prova completa così com'è. Ad esempio, ('test', 'stringa') e ('tes', 't stringa') sarebbero uguali. Potresti fare qualcosa con il padding delle stringhe, ma diventa caotico. Meglio IMO per usare solo una subquery con DISTINCT e quindi ottenere un COUNT da quello. –
select count (Tag_no) from tab_raw_tag_value where tag_no in (select distinct tag_no from tab_raw_tag_value)
Questo non risponde alla domanda –
- 1. SQL distinto e conteggio
- 2. SQL: Conteggio distinto nella clausola where?
- 3. di query SPARQL e conteggio distinto
- 4. Come utilizzare il conteggio distinto in pymongo?
- 5. selezionare il conteggio distinto utilizzando porco latino
- 6. Django annotare conteggio con un campo distinto
- 7. java 8 - torrente, la mappa e il conteggio distinto
- 8. Forzare ActiveRecord al conteggio distinto (con Kaminari)
- 9. Sql Union Tutto * con * "distinto"
- 10. Conteggio mongodb distinto con più campi di gruppo
- 11. SQL virgole distinto elenco delimitato
- 12. Come simulare il conteggio distinto in una vista indicizzata?
- 13. SQL Sever Ottenere un conteggio distinto usando "Raggruppa per ... con cubo"
- 14. Conteggio SQL e duplicati di gruppo
- 15. Query SQL con join, conteggio e dove
- 16. Python Pandas: tabella pivot con aggfunc = conteggio distinto unico
- 17. con distinto e StringComparison.OrdinalIgnoreCase
- 18. Il conteggio (distinto nome_col) è diverso dal conteggio delle righe di una query distinta selezionata?
- 19. SQL Server - INNER JOIN CON DISTINTO
- 20. conteggio SQL - non funziona
- 21. Ottenere un valore distinto su 2 tabelle union sql server
- 22. Problemi con NHibernate distinto e paging
- 23. Seleziona gruppo dal conte e conteggio distinto nella query stessa MongoDB
- 24. ottenere conteggio query in SQL
- 25. come funziona il conteggio sql?
- 26. Panda equivalente (distinto)
- 27. Quando è sql distinto più veloce rispetto alla programmazione java 'distinto'
- 28. LINQ to NHibernate: distinto
- 29. Conteggio delle occorrenze di più colonne distinte in SQL
- 30. Utilizzando l'unione e il conteggio (*) insieme nella query SQL
Cosa intendi per "righe distinte"? –
Hai righe duplicate nell'intera riga, è quello che stai cercando di trovare? –
Ora, quando ci penso, perché i nostri tavoli sono normalizzati, non avremo esattamente le stesse righe quindi è inutile vero ?? È questa la ragione ?? –