SQL получает имена столбцов в цикле для агрегатной функции - PullRequest
0 голосов
/ 24 апреля 2019

Позволяет упростить задачу: мне нужно количество всех столбцов в таблице. Можно ли перебирать имена таблиц вместо того, чтобы вводить каждый COUNT(column_name) для каждого отдельного столбца (при наличии> 20 столбцов)?

 SELECT COUNT(column_1) AS column_1,
        COUNT(column_2) AS column_2,
        COUNT(column_3) AS column_3,
        COUNT(column_4) AS column_4
 FROM table

Было бы неплохо знать общий принцип, который мог бы применяться не только для COUNT(), но и в других ситуациях.

Ответы [ 3 ]

2 голосов
/ 24 апреля 2019

Вы можете создать запрос, используя динамический SQL в хранимой процедуре. Вы получаете имена столбцов из таблицы INFORMATION_SCHEMA.COLUMNS.

SET @cols = (
    SELECT GROUP_CONCAT('COUNT(`', column_name, '`) AS `', column_name, '`'))
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_NAME = 'table');
PREPARE @stmt FROM CONCAT('SELECT ', @cols, ' FROM table');
EXECUTE @stmt;
1 голос
/ 24 апреля 2019

Вы можете использовать INFORMATION_SCHEMA.COLUMNS, чтобы получить все имена столбцов таблицы.Затем Вы можете использовать procedure или anonymous block для циклического перебора всех столбцов и сохранения результатов в некоторой переменной или вставки в какую-либо таблицу

CREATE PROCEDURE curdemo()
BEGIN
  DECLARE done INT DEFAULT FALSE;


  DECLARE col_names CURSOR FOR 
      SELECT column_name
      FROM INFORMATION_SCHEMA.COLUMNS
      WHERE table_name = 'tbl_name'
      ORDER BY ordinal_position;

  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

  OPEN col_names;


  read_loop: LOOP
    FETCH col_names INTO my_col;
    IF done THEN
      LEAVE read_loop;
    END IF;

    --Your Operation goes here 
    --select count(mycol) insert into  yourtab

  END LOOP;

  CLOSE cur1;

END; 
0 голосов
/ 24 апреля 2019

Я не совсем уверен, что вы имеете в виду.COUNT () возвращает количество записей, и оно будет одинаковым для каждого столбца в таблице.Строка - это строка.

Количество столбцов в таблице, которое вы запрашиваете?Если это так, одним из способов является использование INFORMATION_SCHEMA.COLUMNS, например:

SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = N'your_table_name'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...