mysql avg返回了0行

问题描述 投票:-2回答:2

我有2张桌子:

tabla Moviles

idmovil | nombre | marca| idproducto
'1', 'Iphone X', 'Apple', '1'
'2', 'Samsung Galaxy 10', 'Samsung', '2'
'3', 'Xiaomi Redmi X', 'Xiaomi', '3'
'4', 'Huawei P20 PRO', 'Huawei', '4'
'5', 'Honor 30', 'Honor', '5'
'6', 'LG K30 ', 'LG', '6'

tabla Productos

codProductos | Cantidad | tipo | Precio
'1', '25', 'móviles', '1122.90'
'2', '30', 'móviles', '1050.90'
'3', '83', 'móviles', '209.90'
'4', '22', 'móviles', '229.90'
'5', '1', 'móviles', '600.80'
'6', '24', 'móviles', '750.90'
'7', '98', 'tablet', '369.90'
'8', '25', 'tablet', '455.50'
'9', '25', 'tablet', '500.00'

[我希望您向我展示这些手机的价格高于平均价格。

这是我的句子:

SELECT m.nombre
     , p.codProductos
     , p.precio
  FROM moviles m 
  LEFT 
  JOIN productos p
    ON m.idproducto = p.codproductos    
 GROUP
    BY m.idmoviles
 HAVING precio > avg(precio)
 order 
    by precio desc;

[我正在使用MysqlWorkbench,它告诉我:“ 09:37:53从moviles中选择moviles.nombre,Productos.codProductos,Productos.precio从moviles.idproducto = productos.codproductos上左加入productos moviles.idmoviles拥有precio >按precio desc的平均(precio)顺序返回的0行 0.00050秒/ 0.0000081秒2

如果在句子中我更改一个数字的平均值(价格),则结果与预期的一样,并且它返回行。

mysql join average having
2个回答
0
投票

我用子查询解决了

SELECT moviles.nombre
     ,Productos.codProductos
     , Productos.precio
  FROM moviles 
 LEFT 
  JOIN productos 
    ON moviles.idproducto= productos.codproductos 
 GROUP 
    BY  moviles.idmoviles
 HAVING precio > 
    (SELECT AVG(precio) 
             FROM productos) 
 ORDER 
    BY precio desc;

0
投票

首先,我认为LEFT JOIN似乎不正确?如果您在另一个表上有WHERE,为什么还要从表Moviles中得到结果?这似乎是不正确的。而且GROUP BY似乎有点奇怪。也许有一个原因未在问题中显示。我会这样重写:

SELECT m.nombre
     , p.codProductos
     , p.precio
  FROM moviles m 
  JOIN productos p
    ON m.idproducto = p.codproductos    
  WHERE p.precio > (select avg(precio) from productos) 
 order 
    by p.precio desc;

而且看起来价格和ID都是文本值?如果是这样,您应该真正考虑将其更改为int和十进制。

© www.soinside.com 2019 - 2024. All rights reserved.