Access - Problema con consulta sql

 
Vista:

Problema con consulta sql

Publicado por Juanda (1 intervención) el 22/04/2007 14:21:33
Hola me llamo Juanda y soy estudiante de ingenieria infórmatica. Tengo que hacer una práctica de una tienda virtual, y tengo que hacer unas consultas sobre unas tablas de clientes, compras,articulos... Mi programa tiene que funcionar tanto con Oracle como con Access, pero hay una consulta sql que Oracle hace perfectamente y Access no me deja. Es la siguiente:

SELECT CLIENTES.CODIGO,CLIENTES.DNI,CLIENTES.NOMBRE,
CLIENTES.APES,CLIENTES.DIR,CLIENTES.TLFN
FROM CLIENTES,COMPRAS
WHERE CLIENTES.CODIGO=COMPRAS.CLIENTE GROUP BY
CLIENTES.CODIGO,CLIENTES.DNI,CLIENTES.NOMBRE,
CLIENTES.APES,CLIENTES.DIR,CLIENTES.TLFN
HAVING COUNT(*)=(SELECT MAX(COUNT(*))
FROM COMPRAS
GROUP BY CLIENTE)");

Esta consulta devuelve el cliente de mi tienda con más compras realizadas. Mi problema es que Access no permite esta expresión MAX(COUNT(*)) . Alguien sabe si hay alguna forma para hacerlo o en su defecto una consulta alternativa que funcione en Access?

Muchas gracias de antemano ;)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Obtener cliente con más compras realizadas y consulta alternativa

Publicado por Alejandro (4142 intervenciones) el 09/08/2023 18:59:51
Access no permite la expresión `MAX(COUNT(*))` directamente en una consulta, pero puedes lograr el mismo resultado utilizando subconsultas y un ordenamiento. Aquí tienes una solución alternativa que funcionará tanto en Oracle como en Access:

1
2
3
4
5
6
7
SELECT TOP 1 CLIENTES.CODIGO, CLIENTES.DNI, CLIENTES.NOMBRE,
    CLIENTES.APES, CLIENTES.DIR, CLIENTES.TLFN
FROM CLIENTES
INNER JOIN COMPRAS ON CLIENTES.CODIGO = COMPRAS.CLIENTE
GROUP BY CLIENTES.CODIGO, CLIENTES.DNI, CLIENTES.NOMBRE,
    CLIENTES.APES, CLIENTES.DIR, CLIENTES.TLFN
ORDER BY COUNT(*) DESC;

Esta consulta selecciona el cliente con más compras realizadas ordenando los resultados en orden descendente de conteo (`COUNT(*)`). La cláusula `TOP 1` selecciona solo el primer resultado, que será el cliente con más compras.

Recuerda que Access y Oracle tienen diferencias en su sintaxis SQL y en sus capacidades, por lo que en ocasiones es necesario adaptar las consultas para que funcionen en ambos sistemas. Esta solución alternativa debería funcionar en ambas bases de datos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar