我需要你的SQL帮助。 :)
我有一张看起来像这样的表:
Column1 Column2 Column3 ...
null null x
x x null
x null null
x null x
...
我想选择count foreach列,并按此计数得到这样的结果:
Column1 1034
Column24 876
Column3 567
...
目前,我知道如何选择我的列名:
SELECT column_name
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'my_table';
我知道如何计算SQL:
COUNT(my_column);
我想知道是否可以在SQL中执行此操作,因为我需要在phpmyadmin中创建一个视图。
顺便说一句,请原谅我糟糕的英语! ;)非常感谢那些花时间帮助我的人!
答案 0 :(得分:0)
您希望使用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。拥有这种动态模式通常表明设计不佳。