¿Por qué no podemos usar count(distinct *)
en SQL? Como en contar todas las filas distintas?Cuenta SQL (*) y distinto
Respuesta
select count(*) from (select distinct * from MyTable) as T
Aunque yo recomiendo que volver a pensar las consultas que utilizan DISTINCT
. En un gran porcentaje de casos, GROUP BY
es más apropiado (y más rápido).
EDIT: Después de leer los comentarios de interrogación, debo señalar que se debe Nunca pedir a los DBMS para hacer más trabajo de lo que realmente se necesita hacer para obtener un resultado. Si sabe de antemano que no habrá filas duplicadas en una tabla, entonces no use DISTINCT
.
@CHristian - Hola, nunca antes lo había visto de esa manera. por curiosidad lo ejecuté con una tabla existente en mi extremo y obtengo 'Sintaxis incorrecta cerca') ''. trabajar en el servidor ms sql? nota - mi selección dentro de los paréntesis se ejecuta perfectamente – Kamal
En Oracle DISTINCT y GROUP BY tienen el mismo plan de ejecución porque DISTINCT se implementa utilizando GROUP BY. Entonces no debería haber diferencia. –
@Kamal: Perdón, olvidé que SQL Server es un poco dudoso con las consultas anidadas. Agregar un nombre de alias al final ('como T') resolvió el problema. –
De hecho, puede.
Si tiene un identificador, no tendrá filas completamente distintas. Pero que podría ser por ejemplo:
SELECT COUNT(DISTINCT SenderID) FROM Messages
Se pueden seleccionar todas las columnas de la tabla y el grupo de ...
SELECT column1, column2, column3, count(*)
FROM someTable
GROUP BY column1, column2, column3
por qué no
Esto en realidad no obtiene lo que la pregunta pregunta sin embargo. –
?
select
count(distinct name)
from
people
Porque dos personas podrían tener el mismo nombre. El OP preguntó acerca de COUNT (DISTINCT *). –
Lo siento, fue otro texto en la pregunta cuando respondí. – silent
UberKludge, y puede ser POSTGRE específica, pero
select count(distinct table::text) from table
Usted puede tratar de un CTE en SQL Server 2005
;WITH cte AS (
SELECT DISTINCT Val1,Val2, Val3
FROM @Table
)
SELECT COUNT(1)
FROM cte
Para responder a la pregunta, De la documentación
Especifica que todas las filas deben ser contadas para devolver el número total de filas en una mesa. COUNT () no toma los parámetros y no se puede usar con DISTINCT. COUNT () no requiere un parámetro de expresión porque, por la definición , no utiliza la información sobre cualquier columna particular . COUNT (*) devuelve el número de filas en una tabla especificada sin eliminando duplicados. Cuenta cada fila por separado. Esto incluye filas que contienen valores nulos.
Cuando dice "De la documentación" ¿qué documentación sería? –
Sql Server Help Documentation. http://msdn.microsoft.com/en-us/library/ms175997.aspx –
COUNT (*) es el número de filas que coincidan con una consulta.
Una fila contiene información exclusiva, como rowid. Todas las filas son, por definición, distintas.
En su lugar, debe contar las distintas instancias de valores en algún campo.
¿Por qué una fila contiene información única? No tiene que ... probablemente debería pero no es * obligatorio *. – Murph
algunos idiomas pueden no ser capaces de manejar 'distinct *' así que, si desea la distinción hecha a través de muchas columnas, puede usar 'distinct ColumnA || ColumnB ', combinando los valores antes de juzgar si son diferentes. Tenga en cuenta si sus variables son numéricas y su manejador de base de datos puede realizar una conversión automática en cadenas de caracteres.
Esto tampoco es un método de prueba completo tal como está. Por ejemplo, ('test', 'string') y ('tes', 't string') se verían igual. Podrías hacer algo con relleno de cuerdas, pero se vuelve desordenado. Mejor IMO para simplemente usar una subconsulta con DISTINCT y luego obtener un COUNT de eso. –
select count (Tag_no) from tab_raw_tag_value where tag_no in (select distinct tag_no from tab_raw_tag_value)
Esto no responde la pregunta –
- 1. Distinto, cuenta y clasifica en una consulta sql
- 2. SQL Server 2008: TOP 10 y distinto
- 3. sql group por versus distinto
- 4. Cuenta SQL (*) rendimiento
- 5. SQL Server - INNER JOIN CON DISTINTO
- 6. par distinto de los valores de SQL
- 7. OrdenarPor y distinto utilizando entidades LINQ-a-
- 8. Múltiple NO distinto
- 9. LINQ seleccionar distinto C#
- 10. Seleccionar Distinto por 2 columnas en la consulta SQL
- 11. Seleccionar un valor distinto en varias tablas (SQL)
- 12. SQL distinto para 2 campos en una base de datos
- 13. Consulta de SQL Server Server - Contar el campo DateTime distinto
- 14. cuenta scott bloqueada en SQL Plus
- 15. Rendimiento y clasificación, y distinto único entre mysql y php
- 16. CUENTA DISTINTA en SELECCIONAR CASO SQL
- 17. último conjunto distinto de registros
- 18. LINQ - ¿Distinto por valor?
- 19. conde valor nulo distinto y es eliminado por un agregado
- 20. INNER JOIN Distinto ID
- 21. Entity Framework seleccione el nombre distinto
- 22. Cuenta avanzada y unión en Rails
- 23. SELECCIONAR CUENTA (*);
- 24. ¿Cómo obtener un resultado distinto con nHibernate y QueryOver API?
- 25. SQL Sever Obteniendo una cuenta diferente usando "Agrupar por ... Con cubo"
- 26. Cuenta para muchos campos booleanos en una consulta sql?
- 27. SQL AdventureWorks cuenta empleados por sexo por ciudad
- 28. Obtener el estado 'bloqueado' de la cuenta en SQL Server
- 29. Cómo crear automáticamente los elementos asignables a una cuenta SQL?
- 30. Uso de Mín., Máx. Y Cuenta en HQL
¿Qué quiere decir con 'distinct rows'? –
¿Tiene filas que están duplicadas en toda la fila, es eso lo que está tratando de encontrar? –
Ahora cuando lo pienso, porque nuestras tablas están normalizadas, no tendremos exactamente las mismas filas, así que es inútil ¿no? ¿Es esta la razón? –