mysql: ¿Cómo unir INNER una mesa pero limitar unir a 1 resultado con el mayor voto o conteo?

StackOverflow https://stackoverflow.com/questions/1425894

  •  07-07-2019
  •  | 
  •  

Pregunta

Tengo 2 mesas. Uno son artículos y otro son votos para esos artículos.

Items table has: |item_id|name|post_date
Votes table has: |votes_id|item_id|answer|total_yes|total_no

Lo que quiero hacer es mostrar todos los elementos basados ??en post_date y mostrar la respuesta en la tabla de votos con el total HIGHEST total_yes. Por lo tanto, quiero mostrar solo una SOLA respuesta de la tabla de votos con el mayor total_yes vote.

Estaba intentando:

SELECT a.*, b.* FROM Items a
INNER JOIN Votes b ON a.item_id = b.item_id
GROUP by a.item_id
ORDER by a.post_date DESC, b.total_yes DESC

Pero eso no funciona.

El resultado que me gustaría ver es:

<item><answer><yes votes>
Buick | Fastest | 2 yes votes
Mercedes | Shiny | 32 yes votes
Honda | Quick | 39 yes votes

¡Se agradece cualquier ayuda!

¿Fue útil?

Solución

SELECT a.*, b.*
  FROM Items a
       LEFT JOIN Votes b on a.item_id = b.item_id
                         and b.total_yes = (select max(total_yes) 
                                              from Votes v 
                         where v.item_id = a.item_id)
ORDER BY a.post_date DESC, b.total_yes DESC

N.B .: si tiene para un elemento 2 respuestas con el mismo total_yes = max, tendrá 2 filas para ese elemento.

Otros consejos

agregue LIMIT 1 al final de su consulta :)

eso solo tomará un registro, pero en el momento en que está ordenando por la fecha primero, por lo que obtendrá el voto más alto para la última fecha votada. ¿Es eso lo que quieres?

Si desea obtener el voto total más alto, independientemente de lo que necesite ordenar antes de eso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top