gpt4 book ai didi

MySQL 迭代列名

转载 作者:行者123 更新时间:2023-11-29 21:02:15 24 4
gpt4 key购买 nike

我需要你在 SQL 方面的帮助。 :)

我有一个看起来像这样的表格:

Column1   Column2   Column3   ...
null null x
x x null
x null null
x null x
...

我想选择每个列的计数,并得到像这样按此计数排序的结果:

Column1    1034
Column24 876
Column3 567
...

现在,我知道如何选择我的列名称:

SELECT column_name
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'my_table';

我知道如何用 SQL 进行计数:

COUNT(my_column);

我想知道是否可以在 SQL 中执行此操作,因为我需要在 phpmyadmin 中创建一个 View 。

顺便说一句,请原谅我糟糕的英语! ;)

非常感谢那些花时间帮助我的人!

最佳答案

您想使用UNION合并多个计数查询,如下所示:

(SELECT 'Column1' AS `COLUMN_NAME`, COUNT(Column1) AS Count FROM my_table)
UNION ALL
(SELECT 'Column2' AS `COLUMN_NAME`, COUNT(Column2) AS Count FROM my_table)
-- ...
ORDER BY Count DESC

如果您需要动态构建此类查询(例如,因为您事先不知道列名称1),那么您可以使用查询结果以您选择的语言执行此操作关于信息模式。

如果您选择的语言恰好是 MySQL,那么您可以使用它的 SQL syntax for prepared statements :

SELECT CONCAT(
GROUP_CONCAT('(
SELECT ', QUOTE(COLUMN_NAME), ' AS `COLUMN_NAME`,
COUNT(`', REPLACE(COLUMN_NAME, '`', '``'), '` AS Count
FROM my_table
)'
SEPARATOR ' UNION ALL '
), '
ORDER BY Count DESC
')
INTO @sql
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'my_table';

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

1。拥有这种动态模式通常表明设计很差。

关于MySQL 迭代列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37112883/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com