1

鉴于此表结构:

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 Fiddle:http ://sqlfiddle.com/#!2/6b19f/1

你试过什么?

我什至想不出从哪里开始解决这个问题,所以我很抱歉无法展示一个尝试过的解决方案。如果我得到任何地方,我会更新这个问题。

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

4

1 回答 1

1

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

SELECT
  sector_id AS Number,
  type
  percentage
FROM
  splits

现在最简单的事情就是带上你的软件,然后把那些(类型百分比)元组变成字符串。为什么需要数据库来创建和连接这个字符串?

可以超过type2s吗?

对于 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
于 2013-03-04T01:42:33.923 回答