Java - Rango de edades, Java, MySQL

 
Vista:

Rango de edades, Java, MySQL

Publicado por citizenRookie (2 intervenciones) el 02/02/2021 10:55:11
Agradezco de antemano la ayuda que me puedan prestar. Primero, mostraré lo que sí me funciona, para luego poder exponer mejor donde me encuentro el problema que deseo consultar.
Tengo la clase Producto.java

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
public class Producto {
    private int idproducto;
    private String producto;
    private Integer cuentaProducto;
    public Producto(){}
    public Producto(int idproducto, Integer cuentaProducto, String producto){
        this.idproducto=idproducto;
        this.cuenta=cuenta;
        this.producto=producto;
    }
    public int getIdProducto() {
        return idProducto;
    }
 
    public void setIdProducto(int idproducto) {
        this.idproducto = idproducto;
    }
 
    public String getProducto() {
        return producto;
    }
 
    public void setProducto(String producto) {
        this.producto = producto;
    }
 
    public Integer getCuentaProducto() {
        return cuentaProducto;
    }
 
    public void setCuenta(Integer cuentaProducto) {
        this.cuentaProducto = cuentaProducto;
    }
 
	Tengo las tablas producto y clientes, con lo cual puedo realizar una consulta que me muestra cuántos
	productos fueron comprados por cada cliente.
 
    public class ProductoDao {
    private final String SELECTPRODUCTO = "select * from producto where idproducto = ?";
    private Connection conn;
    public ProductoDao(Connection conn){ this.conn=conn; }
    public Producto findOne (int idproducto) {
       try {
           PreparedStatement comando = conn.prepareStatement(SELECTPRODUCTO);
           comando.setInt(1, idproducto);
           ResultSet rs = comando.executeQuery();
           if ( rs.next() ) {
               return new Centro (rs.getInt("idproducto"), 0, rs.getString("producto"));
           }
       } catch (SQLException ex) {
           Logger.getLogger(ProductoDao.class.getName()).log(Level.SEVERE, null, ex);
       }
       return null;
   }
}
 
}

Este es el código de la consulta que muestra cuantos productos fueron comprados por determinado cliente:

1
2
3
4
5
6
7
pcon = conexion.prepareStatement("SELECT idproducto, COUNT(idproducto) cuentaProducto from clientes group by 1");
resultado = pcon.executeQuery();
productoDao = new ProductoDao(conexion);
List<Producto> result = new ArrayList<>();
while (resultado.next()){
    result.add(new Producto(resultado.getInt("idproducto"), resultado.getInt("cuentaProducto"), productoDao.findOne(resultado.getInt("idproducto")).getProducto()));
}

En la tabla "clientes" hay un campo "idproducto" y de esta forma puedo conseguir como respuesta el número de productos comprados("cuentaProducto") y el nombre de dichos productos (almacenados en el campo "producto" de la tabla producto (campos de de esta tabla: idproducto y producto).
Mi problema radica en que necesito hacer lo mismo con rangos de edad calculados a partir de la fecha de nacimiento, pero no tengo una tabla de rangos de edad, como en el caso de la tabla productos (idproducto, producto, por ejemplo: .(1, mesa), (2, silla)...
Deseo aclarar que parte del problema está en el hecho de que es requisito indispensable no tener que crear esa tabla de rangos de edad, ni añadir a la tabla clientes ningún campo más.
¿Cómo puedo hacerlo teniendo en cuenta el código anteriormente mostrado?
Muestro la sentencia SQL que agrupa por rangos de edades calculando la edad a partir del campo "fechaNacimiento" de la tabla clientes:
1
2
3
4
5
6
7
8
9
10
SELECT
    CASE
        WHEN edad BETWEEN 20 and 29 THEN '20 - 29'
        WHEN edad BETWEEN 30 and 39 THEN '30 - 39'
        WHEN edad BETWEEN 40 and 49 THEN '40 - 49'
        WHEN edad edad >= 50 THEN 'Mayor de 50'
    END as rango,
    COUNT(*) AS cuenta
    FROM (SELECT TIMESTAMPDIFF(YEAR, fechaNacimiento, CURDATE()) AS edad FROM clientes) as derived
    GROUP BY rango
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