查询以获取分类的分组集

时间:2013-03-04 01:34:33

标签: mysql sql

鉴于此表结构:

CREATE TABLE IF NOT EXISTS splits (
    id INT AUTO_INCREMENT,
    sector_id INT,
    type VARCHAR(100),
    percentage INT,
    PRIMARY KEY (id),
    INDEX (type)
) ENGINE MyISAM;

这个数据集:

INSERT INTO splits (sector_id, type, percentage) VALUES
(1, 'Manager', '50'),
(1, 'Sales Rep', '50'),
(2, 'Manager', '75'),
(2, 'Sales Rep', '25'),
(3, 'Manager', '75'),
(3, 'Sales Rep', '25'),
(4, 'Manager', '100'),
(5, 'Manager', '100'),
(6, 'Manager', '100');

我怎样才能以相同的方式返回分割的扇区数量:

像这样:

Split          | Number
---------------+-------
50% M / 50% SR | 1
75% M / 25% SR | 2
100% M         | 3

因此,这表明1个扇区(id 1)的分流比为50/50,2个扇区的分流比为75/25(ids 2,3),3个扇区的分流比率为100/0(ids) 4,5,6)。

这是一个带有数据库设置的SQL小提琴:http://sqlfiddle.com/#!2/6b19f/1

  

您尝试了什么?

我甚至无法想到从哪里开始解决这个问题,所以我为无法展示尝试的解决方案而道歉。如果我到处都会更新这个问题。

我想在数据库(而不是应用程序)中执行此操作的原因是因为我们的自动报告工具可以指向表/视图/查询并自动应用过滤,排序,图表等。在应用程序中手动丢失所有默认功能。

1 个答案:

答案 0 :(得分:1)

我真的不明白这个问题。您的数据库是否包含您要检索的所有数据?!

SELECT
  sector_id AS Number,
  type
  percentage
FROM
  splits

现在最简单的方法是将软件转换为字符串,然后将这些(类型百分比)元组转换为字符串。 为什么需要数据库来创建和连接此字符串?

是否可以有超过2个type s?

对于Postgres,我会使用一组元组来输出:

SELECT
  sector_id,
  array_agg(row(percentage, type))
FROM
  splits
GROUP BY
  sector_id

正确查询:

SELECT
  x.y,
  COUNT(*) c
FROM (
  SELECT
    sector_id,
    GROUP_CONCAT(CONCAT(percentage, '% '), type SEPARATOR ' / ') AS y
  FROM (
    SELECT
      sector_id,
      type,
      percentage
    FROM splits
    ORDER BY sector_id, type
  ) z
  GROUP BY sector_id
) x
GROUP BY x.y
ORDER by c

结果将如下所示:

50% Manager / 50% Sales Rep | 1
75% Manager / 25% Sales Rep | 2
100% Manager                | 3