使用列名作为WHERE子句参数的MySQL查询

时间:2018-09-04 19:15:46

标签: mysql pivot-table dynamic-sql database-cursor

我有一个数据库表,其重要列如下:

CREATE myTable (
  id int,
  type varchar(128),
  field1 text);

我想做的是获取每个用户每种类型的行数的计数。 SQL很简单:

SELECT id, type, count(*) as count
FROM myTable
GROUP BY id, type;

我面临的挑战是我希望输出形式为二维表,其中行是id,列是不同的类型(其中有十几种左右)

我已经弄清楚了如何为此创建表结构:

SELECT
  CONCAT(
    'CREATE TABLE tmpMyTable (id int,',
    GROUP_CONCAT(DISTINCT
      CONCAT(type, ' int')
      SEPARATOR ','),
    ');')
FROM (select distinct type from myTable) t
INTO @sql;

PREPARE stmt FROM @sql;
EXECUTE stmt;

但是我不知道如何有效地用数据填充表格。是的,我可以使用游标,遍历列名并为每个列执行动态SQL语句。但是,我想知道是否存在一种不使用游标的方法。

有什么建议吗?

谢谢。

0 个答案:

没有答案