Например, у меня есть таблица с именем XYZ, и в ней есть столбец COUNTRY, как я могу вывести результаты в следующем формате, используя группировку по функции,
В ИНДИИ 3 сотрудника
здесь 3 выбрано из count(), а ИНДИЯ сгруппирована по «GROUP BY», мой вопрос заключается в том, как вы печатаете «имеет» и сотрудников между ними и в конце в mySQl
Я изучаю СУБД в Oracle APEX. БЛАГОДАРЮ.
Каждая марка и версия сервера баз данных имеет свой диалект SQL. Пожалуйста, редактировать ваш вопрос, чтобы добавить ярлык для используемой вами базы данных. mysql? оракул? Другой?
Если вы используете Oracle APEX, вы не можете использовать MySQL — какой из них на самом деле?
я использую oracle apex, который использует команды sql
Обратите внимание, что «mysql» — это другой продукт. «sql» и «mysql» не являются синонимами. «mysql» — это реляционная база данных, такая же, как «oracle», «mariadb», «sql server» и другие. "sql" - это язык, который используют все эти базы данных...
В MySQL/MariaDB вы хотите
SELECT CONCAT_WS(' ', country, 'has', COUNT(*), 'employees')
В Oracle вы хотите
SELECT country || ' has ' || COUNT(*) || ' employees
Редактировать Это простая старая обработка строк. У каждого языка, включая каждый диалект SQL, есть свои способы обработки строк.
Вы можете сгенерировать любую строку, которую хотите, либо с помощью Oracle ||
, либо с помощью CONCAT_WS() MariaDB/MySQL. Для вашего примера это
SELECT CONCAT_WS(' ', COUNT(*), 'employees from', country)
или
SELECT COUNT(*) || ' employees from ' || country
Спасибо - я не знал о CONCAT_WS
. (Здесь это не проблема, но я вижу полезность в других ситуациях.) Я запомню, что CONCAT With Seperator
Что, если я захочу вот так 3 сотрудника из Индии?
В Oracle мы можем использовать ||
для объединения строк в ВЫБРАТЬ.
Если мы хотим перечислить все значения в ГРУППА ПО, мы можем использовать LISTAGG()
.
(В mySQL мы можем использовать CONCAT()
или CONCAT_WS()
для простой конкатенации и GROUP_CONCAT()
с GROUP BY.)
CREATE TABLE Employee ( id int, name varchar(10), country varchar(10));
INSERT INTO Employee VALUES (1,'Tom','India');
INSERT INTO Employee VALUES (2,'Dick','India');
INSERT INTO Employee VALUES (3,'Harry','India');
SELECT country || ' has ' || COUNT(id) || ' employees' AS report FROM Employee GROUP BY country;
| REPORT | | :-------------------- | | India has 3 employees |
SELECT country, LISTAGG(name,', ') Employees FROM Employee GROUP BY country;
COUNTRY | EMPLOYEES :------ | :--------------- India | Tom, Dick, Harry
дб <> рабочий пример здесь
Еще одна вещь, что, если я хочу, чтобы это было так 3 сотрудника из Индии
См. измененный ответ с добавлением LISTAGG()
.
Я пробовал это, но не получил то, что хочу. Выберите отдельную СТРАНУ из группы XYZ по порядку стран по количеству (*) desc