我有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
如果在句子中我更改一个数字的平均值(价格),则结果与预期的一样,并且它返回行。
我用子查询解决了
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;
首先,我认为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和十进制。