让它变得简单:我需要计算表中所有列的数量。是否可以遍历表名,而不是为每列(如果有> 20列)都键入每个COUNT(column_name)
?
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()
,而且还可以应用于其他情况。
答案 0 :(得分:2)
您可以在存储过程中使用动态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 :(得分:1)
您可以使用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;
答案 2 :(得分:0)
我不太确定你的意思。 COUNT()返回记录数,并且表中的每一列都相同。一排就是一排。
您要查询的表中的列数是多少?如果是这样,一种方法是像这样使用INFORMATION_SCHEMA.COLUMNS:
SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = N'your_table_name'