# 1055 - Выражение # 2 списка SELECT отсутствует в предложении GROUP BY и содержит неагрегированный столбец 'osunemonitor.r.entry_date' - PullRequest
0 голосов
/ 09 февраля 2019

Я пытаюсь сгруппировать по ward_name, единственное, что мне нужно сгруппировать, но я получаю эту ошибку:

\ # 1055 - Выражение № 2 списка SELECT отсутствует в GROUPПредложение BY и содержит неагрегированный столбец osunemonitor.r.entry_date, который функционально не зависит от столбцов в предложении GROUP BY;это несовместимо с sql_mode = only_full_group_by

В моем запросе, как я могу сделать его сгруппировать только по ward_name?

Мой запрос:

SELECT 
    pu.pu_ward_name, 
    entry_date,
    pu.o_code,
    pu.pu_ward_name,
    pu.pu_lga_name,
    pu.pu_code,
    pu.pu_ward_code,
    pu.pu_lga_code,
    pu.pu_voters_reg_count, 
    SUM(total_vote_cast) AS total_vote_cast,
    SUM(apc_total_vote) AS apc_total_vote,
    SUM(pdp_total_vote) AS pdp_total_vote,
    SUM(adp) AS adp, ward_name
FROM 
    post_election_info r 
    LEFT JOIN polling_unit pu ON r.ward_name = pu.pu_ward_name 
WHERE lga_name = 'BORIPE'
GROUP BY 
    pu.pu_ward_name

1 Ответ

0 голосов
/ 09 февраля 2019

Каждый неагрегированный столбец должен появляться в предложении GROUP BY.Это стандарт в ANSI SQL, хотя в древних версиях MySQL он был слабым.

Подумайте об этом: если вы SELECT столбец, но не GROUP BY, то как надежно будет работать СУРБД?выбрать, какое значение в группе должно отображаться?

Возможные решения включают в себя:

  • добавить все другие неагрегированные столбцы к предложению GROUP BY
  • использовать агрегирующие функции для всех исключенных столбцов pu_ward_name.Например, MAX () и MIN () являются дружественными для строк (в отличие от SUM ()).

Первое решение:

SELECT 
    pu.pu_ward_name, 
    entry_date,
    pu.o_code,
    pu.pu_lga_name,
    pu.pu_code,
    pu.pu_ward_code,
    pu.pu_lga_code,
    pu.pu_voters_reg_count, 
    SUM(total_vote_cast) AS total_vote_cast,
    SUM(apc_total_vote)  AS apc_total_vote,
    SUM(pdp_total_vote)  AS pdp_total_vote,
    SUM(adp) AS adp
FROM 
    post_election_info r 
    LEFT JOIN polling_unit pu ON r.ward_name = pu.pu_ward_name 
WHERE lga_name = 'BORIPE'
GROUP BY 
    pu.pu_ward_name, 
    entry_date,
    pu.o_code,
    pu.pu_lga_name,
    pu.pu_code,
    pu.pu_ward_code,
    pu.pu_lga_code,
    pu.pu_voters_reg_count

Второе решение:

SELECT 
    pu.pu_ward_name, 
    MAX(entry_date)             AS entry_date,
    MAX(pu.o_code)              AS o_code,
    MAX(pu.pu_lga_name)         AS pu_lga_name,
    MAX(pu.pu_code)             AS pu_code,
    MAX(pu.pu_ward_code)        AS pu_ward_code,
    MAX(pu.pu_lga_code)         AS pu_lga_code,
    MAX(pu.pu_voters_reg_count) AS pu_voters_reg_count, 
    SUM(total_vote_cast)        AS total_vote_cast,
    SUM(apc_total_vote)         AS apc_total_vote,
    SUM(pdp_total_vote)         AS pdp_total_vote,
    SUM(adp)                    AS adp
FROM 
    post_election_info r 
    LEFT JOIN polling_unit pu ON r.ward_name = pu.pu_ward_name 
WHERE lga_name = 'BORIPE'
GROUP BY 
    pu.pu_ward_name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...