Sto cercando di capire quale lingua un utente risponda di più e restituire tramite user_id
, il numero language_id
risponda nella maggior parte e quante volte hanno delle risposte.Utilizzo di MAX() e COUNT() nella stessa query
Ho cominciato SELECT
ing un tavolo/sub-tavolo che restituisce questi risultati:
Table: `sub-selected`
`user_id` `language_id` `answers`
1 1 1
2 1 1
1 2 5
2 2 2
1 4 3
1 5 1
Questa tabella restituisce il user_id
, il language_id
, e quante volte che language_id
ha ricevuto risposta da parte dell'utente. Ho usato questa query per farlo:
SELECT t1.user_id, t2.to_language_id, COUNT(t2.to_language_id) as answers
FROM translation_results as t1
LEFT JOIN translations as t2
ON t2.translation_id = t1.translation_id
GROUP BY t2.to_language_id, t1.user_id
La struttura della tabella è:
Table: `translations`
`translation_id` `from_phrase_id` `to_language_id`
Table: `translation_results`
`translation_id` `result_id` PRI-AI `user_id`
I translations
tabella contiene tutte le traduzioni richieste, e le translation_results tabella contiene le risposte a quelle traduzioni e il rispettivo user_id
.
Quindi, per riassumere la tavola e per ottenere l'user_id, la maggior parte ha risposto language_id
, e quante volte hanno risposto in quel language_id
, ho usato:
SELECT t1.user_id, t1.to_language_id, MAX(t1.answers)
FROM (
//The sub-table
SELECT t1.user_id, t2.to_language_id, COUNT(t2.to_language_id) as answers
FROM translation_results as t1
LEFT JOIN translations as t2
ON t2.translation_id = t1.translation_id
GROUP BY t2.to_language_id, t1.user_id
) as t1
GROUP BY t1.user_id, t1.to_language_id
Ma questo non comprimere la tabella in la struttura desiderata e restituisce invece:
Table: `sub-selected`
`user_id` `language_id` `answers`
1 1 1
1 2 5
1 4 3
1 5 1
2 1 1
2 2 2
so che è influenzato dal gruppo dal di two clauses
, ma poi se solo gruppo da user_id e non includono to_language_id nelle mie colonne selezionate, non posso sapere quale respectiv e language_id è la più risposta. Ho anche provato sotto-query e alcuni join, ma trovo che ho costantemente bisogno di usare MAX(t1.answers)
a prescindere dalle colonne selezionate e quindi distrugge le mie speranze di agguantare correttamente il group by
. Come posso comprimere correttamente la query invece di avere group by
trovare tutte le combinazioni MAX()
univoche di user_id
e to_language_id
?
Hi è possibile creare [SQL Fiddle] (http://sqlfiddle.com/) con alcuni dati e aggiungi alla domanda l'output desiderato? tnx –