Mysql group by делает противоположность группировки по - PullRequest
0 голосов
/ 07 апреля 2020

Это запрос и результат без использования группировки по: Запрос без группировки по

SELECT count(T2.id_korisnika) As brojPonuda, CONCAT(T2.ime, ' ', T2.prezime) AS naziv 
FROM ponude T1, tblKorisnici T2 
WHERE T1.id_korisnika = T2.id_korisnika 

А это запрос и результат с группировкой по: Запрос с группировкой на

SELECT count(T2.id_korisnika) As brojPonuda, CONCAT(T2.ime, ' ', T2.prezime) AS naziv 
FROM ponude T1, tblKorisnici T2 
WHERE T1.id_korisnika = T2.id_korisnika 

Group by naziv

Мой вопрос: почему они противоположны тому, что должно произойти? Разве группировка не предполагает группирование нескольких строк с одинаковыми значениями и получение результата статистической функции вместе с сгруппированным значением? Так почему же в этом случае происходит противоположное? Когда я не использую группу, она автоматически группируется, и если я использую ее, я получаю странный результат, когда значения разделяются, также я не понимаю, почему в некоторых строках есть 2, а все остальные - 1

Обновление: похоже, работает, когда я заменяю concat и столбец "naziv" на id_korisnika. Так, может быть, mysql не может правильно сгруппироваться со строками?

Запрос с замененным столбцом

Вот данные в базе данных:

tblKorisnici

ponude

Ответы [ 2 ]

0 голосов
/ 07 апреля 2020

Проблема заключалась в том, что у меня был другой столбец с именем "naziv" в моей таблице "ponude", и sql явно отдавал приоритет этому имени вместо псевдонима, и поэтому результаты были неверными.

SQL - использование псевдонима в группе по

0 голосов
/ 07 апреля 2020

Ваш первый запрос должен быть записан как:

SELECT count(T2.id_korisnika) As brojPonuda,
       CONCAT(T2.ime, ' ', T2.prezime) AS naziv 
FROM ponude T1 JOIN
     tblKorisnici T2 
     ON T1.id_korisnika = T2.id_korisnika ;

Это запрос агрегации без GROUP BY. Следовательно, он теоретически возвращает одну строку - обрабатывает весь набор результатов (из JOIN) как одну группу. Тем не менее, запрос синтаксически некорректен, потому что naziv не входит в GROUP BY.

Второй запрос:

SELECT count(T2.id_korisnika) As brojPonuda,
       CONCAT(T2.ime, ' ', T2.prezime) AS naziv 
FROM ponude T1 JOIN
     tblKorisnici T2 
     ON T1.id_korisnika = T2.id_korisnika
GROUP BY naziv;

Это просто говорит о создании результирующего набора, где строки определяются различными значениями naziv. Каждая из этих строк суммируется из результата JOIN, а счет - первый столбец.

...