Как я могу добавить поле (для каждой возвращаемой записи) в выводе запроса, содержащее общее число или записи, возвращенные моим запросом? - PullRequest
0 голосов
/ 21 мая 2018

Я не очень разбираюсь в SQL, и у меня возникла следующая проблема при работе с MySql-запросом, который может возвращать 0,1,> 1 записей в качестве вывода.

Мне нужно добавить поле (в каждую строку)который содержит общее количество строк.Например, если общее количество или количество записей, возвращаемых моим запросом, равно 4, то поле record_number , содержащее эти значения во всех возвращаемых строках.

Это мой запрос:

SELECT
    LS.id                                                                           AS livestock_id,
    LS.parent_livestock_species_id                                                  AS parent_livestock_species_id,
    LS.livestock_species_name_en                                                    AS livestock_species_name_en,
    IFNULL(LSN.livestock_species_name, LS.livestock_species_name_en)                AS livestock_species_name,  
    LSN.description                                                                 AS description,
    LS.image_link                                                                   AS image_link,
    count(*)                                                                        AS record_number
FROM LivestockSpecies                                                               AS LS
LEFT JOIN LivestockSpeciesName                                                      AS LSN
      ON LSN.livestock_species_id = LS.id AND LSN.language_id = 1
WHERE
    LS.id = 1
OR
    LS.parent_livestock_species_id = 1

Делая так, я получаю это сообщение об ошибке:

#42000In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column 'digital_services_DB.LS.id'; this is incompatible with sql_mode=only_full_group_by

Почему?Как я могу это исправить?

1 Ответ

0 голосов
/ 21 мая 2018

Я предполагаю, что таблица языков не меняет количество строк (это разумно из-за left join), поэтому вы можете просто добавить подзапрос в from или select:

select . . .
       (select count(*) from LivestockSpecies ls2 where ls2.id = 1 or ls2.parent_livestock_species_id = 1
       ) as total_number

В MySQL 8.0 вы можете использовать оконные функции, так что это более точно рассчитывается как:

select . . .
       count(*) over () as total_number
...