#mysql
#mysql
Вопрос:
Пытаюсь получить: 20 лучших PI, у которых наибольшее общее количество наград, вместе с университетами, с которыми они связаны.
Mysql: SELECT award, pi, org FROM tbl WHERE groupby(award) LIMIT 20
Таблица:
Похоже, ей не нравится моя группа by. Что здесь происходит не так?
Комментарии:
1. Вам нужно что-то агрегировать, если вы используете groupby dev.mysql.com/doc/refman/5.0/en/group-by-functions.html
2. Помогите с моим вопросом, пожалуйста.
3. Я даже не слышал об этой
groupby
функции; что она делает? (Отличной отGROUP BY
предложения, то есть.)
Ответ №1:
Вам нужно что-то сгруппировать, вот что вы пытаетесь сделать:
SELECT distinct award, pi, org FROM tbl LIMIT 20;
Ответ №2:
Вы не можете включать столбцы в группу по запросу, которые не являются совокупным столбцом (т. Е. count) или не являются частью группировки — это должно сработать:
SELECT count(*) as ArwardCount, pi
FROM tbl
GROUP BY pi
ORDER BY ArwardCount desc
LIMIT 0, 20;
Комментарии:
1. gaah, я думаю, я слишком долго застрял с SQL Server;-(
Ответ №3:
С
SELECT award, pi, org FROM tbl WHERE groupby(award) LIMIT 20
Вы бы получили SQL Error (1305): FUNCTION xxx.groupby does not exist
Вместо этого вам нужно приведенное ниже, предполагая, что pi
один является уникальным, а org находится в той же таблице (денормализованной)
SELECT pi, org, count(award) awardcount
FROM tbl
GROUP BY pi, org
ORDER BY awardcount DESC
LIMIT 20;