Quello che voglio fare è SUM una colonna, ma anche CONTA il numero di righe che somma, con un limite di non più di 5 righe. Quindi la mia domanda è:COUNT MySQL con LIMIT
SELECT COUNT(*), SUM(score) FROM answers WHERE user=1 LIMIT 5
quello che mi aspettavo di nuovo ero un COUNT (*) fino a 5 (non posso solo supporre che sarà sempre 5 nella mia logica codice come potrebbe avere meno di 5 risposte), con una somma del punteggio dello fino a 5 righe.
Invece quello che sembra tornare è il numero totale di righe corrispondenti (dove utente è 1) come il conteggio e la somma del punteggio per quelle righe. I numeri non cambiano se ho messo LIMIT 1 o LIMIT 5 o anche limitare 50.
quello che credo funzionerà in questa situazione è questa, invece
SELECT COUNT(*), SUM(score) FROM (SELECT * FROM answers WHERE user=1 LIMIT 5) AS a
Ma che sembra un po 'contorto per una semplice query come e siccome è in uno script di traffico elevato, non voglio che sia il più performante possibile.
Mi manca qualcosa? Ho trovato questo bug report di qualche anno fa che sembra essere collegato a questo "problema" http://bugs.mysql.com/bug.php?id=50005 ma suppongo che non sia in realtà un bug?
'LIMIT 5' restituirà al massimo 5 righe. 'SELECT COUNT (*), SUM (punteggio) FROM answers' restituirà 1 riga. 1 <5. È corretto nella seconda query. –
Yep @ ta.speot.is, penso di aver solo bisogno di qualcuno per verificare che non stavo facendo qualcosa di stupido. Avrei potuto giurare che c'era una query più semplice per fare ciò di cui avevo bisogno, ma ovviamente no. – Lee
usando 'select 1' invece di' select * 'nella query nidificata può teoricamente portare a un minor utilizzo di memoria –