de-vraag
  • Ερωτήσεις
  • Ετικέτες
  • Χρήστες
Ειδοποιήσεις
Ανταμοιβές
Εγγραφή
Μόλις εγγραφείτε, θα ενημερωθείτε για τις απαντήσεις και τα σχόλια στις ερωτήσεις σας.
Συνδεθείτε
Αν έχετε ήδη λογαριασμό, συνδεθείτε για να ελέγξετε τις νέες ειδοποιήσεις.
Θα υπάρξουν ανταμοιβές για πρόσθετες ερωτήσεις, απαντήσεις και σχόλια.
Περισσότερα
Πηγή
Επεξεργασία
 maxsilver
maxsilver
Ερώτηση

SQL Group By με Order By

Έχω έναν πίνακα με ετικέτες και θέλω να πάρω τις ετικέτες με τον υψηλότερο αριθμό από τη λίστα.

Το δείγμα δεδομένων μοιάζει με αυτό

id (1) tag ('night')
id (2) tag ('awesome')
id (3) tag ('night')

χρησιμοποιώντας

SELECT COUNT(*), `Tag` from `images-tags`
GROUP BY `Tag`

μου δίνει πίσω τα δεδομένα που ψάχνω τέλεια. Ωστόσο, θα ήθελα να το οργανώσω, έτσι ώστε οι υψηλότεροι αριθμοί ετικετών να είναι πρώτοι, και να το περιορίσω να μου στέλνει μόνο τις πρώτες 20 περίπου.

Δοκίμασα αυτό...

SELECT COUNT(id), `Tag` from `images-tags`
GROUP BY `Tag`
ORDER BY COUNT(id) DESC
LIMIT 20

και συνεχίζω να λαμβάνω ένα "Μη έγκυρη χρήση της συνάρτησης ομάδας - ErrNr 1111&quot,

Τι κάνω λάθος;

Χρησιμοποιώ τη MySQL 4.1.25-Debian.

114 2008-08-26T13:09:15+00:00 3
OMG Ponies
OMG Ponies
Επεξεργασμένη ερώτηση Κάνε Απρίλιος 2011 в 11:28
Προγραμματισμός
sql
mysql
mysql-error-1111
Αυτή η ερώτηση έχει 1 απάντηση στα αγγλικά, για να τις διαβάσετε συνδεθείτε στο λογαριασμό σας.
angry person
angry person
Κάνε Αύγουστος 2008 в 1:14
2008-08-26T13:14:37+00:00
Περισσότερα
Πηγή
Επεξεργασία
#8428620

Η MySQL πριν από την έκδοση 5 δεν επέτρεπε τις συναρτήσεις συνάθροισης σε ρήτρες ORDER BY.

Μπορείτε να παρακάμψετε αυτό το όριο με την απαρχαιωμένη σύνταξη:

SELECT COUNT(id), `Tag` from `images-tags`
GROUP BY `Tag`
ORDER BY 1 DESC
LIMIT 20

1, αφού είναι η πρώτη στήλη στην οποία θέλετε να ομαδοποιήσετε.

51
0
 jerhinesmith
jerhinesmith
Κάνε Αύγουστος 2008 в 1:15
2008-08-26T13:15:36+00:00
Περισσότερα
Πηγή
Επεξεργασία
#8428627

Δεν γνωρίζω για τη MySQL, αλλά στην MS SQL, μπορείτε να χρησιμοποιήσετε το δείκτη στήλης στη ρήτρα order by. Το έχω ξανακάνει αυτό όταν κάνω μετρήσεις με group bys, καθώς τείνει να είναι πιο εύκολο να δουλέψει κανείς.

Έτσι

SELECT COUNT(id), `Tag` from `images-tags`
GROUP BY `Tag`
ORDER BY COUNT(id) DESC
LIMIT 20

Γίνεται

SELECT COUNT(id), `Tag` from `images-tags`
GROUP BY `Tag`
ORDER 1 DESC
LIMIT 20
 jerhinesmith
jerhinesmith
Επεξεργασμένη απάντηση Κάνε Αύγουστος 2008 в 5:18
8
0
 JosephStyons
JosephStyons
Κάνε Αύγουστος 2008 в 5:34
2008-08-26T17:34:48+00:00
Περισσότερα
Πηγή
Επεξεργασία
#8428632

Στην Oracle, κάτι τέτοιο λειτουργεί ωραία για να διαχωρίσετε λίγο καλύτερα την καταμέτρηση και την παραγγελία σας. Δεν είμαι σίγουρος αν θα λειτουργήσει στη MySql 4.

select 'Tag', counts.cnt
from
  (
  select count(*) as cnt, 'Tag'
  from 'images-tags'
  group by 'tag'
  ) counts
order by counts.cnt desc
5
0
Προσθήκη ερώτησης
Κατηγορίες
Όλα
Τεχνολογία
Πολιτισμός / Αναψυχή
Ζωή / Τέχνες
Επιστήμη
Επαγγελματικό
Επιχείρηση
Χρήστες
Όλα
Νέα
Δημοφιλές
1
Виталий Теслюк
Εγγεγραμμένη πριν 1 μέρα
2
shokir qochqorov
Εγγεγραμμένη πριν 1 μέρα
3
Roxana Elizabeth CASTILLO Avalos
Εγγεγραμμένη πριν 1 εβδομάδα
4
Hideo Nakagawa
Εγγεγραμμένη πριν 1 εβδομάδα
5
Sergiy Tytarenko
Εγγεγραμμένη πριν 1 εβδομάδα
DE
EL
ES
FR
ID
IT
JA
KO
NL
PT
RU
TR
ZH
© de-vraag 2022
Πηγή
stackoverflow.com
με άδεια cc by-sa 3.0 με αναφορά