Mysql查询配置

时间:2015-04-08 02:13:52

标签: mysql

我有这个查询并且运行完美,我只想缩短结果以帮助我快速阅读:

SELECT numbers 
FROM vista 
WHERE id IN (
    SELECT b.id + 3 FROM(
      SELECT t1.id, t1.numbers t1val, t2.numbers t2val
      FROM vista t1 
      JOIN vista t2 ON t1.id = t2.id-1 
      JOIN vista t3 ON t1.id = t3.id-2 
      WHERE t1.id = (SELECT MAX(id) - 2 FROM vista)
    ) a
    JOIN (
      SELECT t1.id, t1.numbers t1val, t2.numbers t2val, t3.numbers t3val 
      FROM vista t1 
      JOIN vista t2 ON t1.id = t2.id-1 
      JOIN vista t3 ON t1.id = t3.id-2 
      WHERE t1.id < (SELECT MAX(id) - 2 FROM vista)
    ) b 
  ON a.t1val = b.t1val 
  AND a.t2val = b.t2val 
  AND a.t3val = b.t3val 
  AND a.id <> b.id
) 
ORDER BY id;

结果如下:

3
5
2
7
5
5
7
3

如何在组和百分比中计算结果:

喜欢:

5 = 3 (37.50%)
7 = 2 (25.00%)
3 = 2 (25.00%)
2 = 1 (12.50%)

1 个答案:

答案 0 :(得分:0)

如果您的查询有效,那么您应该执行此类操作以获得您想要的结果:

解决方案一 - 这会为您提供数字,组合数字和单独列中的百分比......

SELECT numbers, COUNT(numbers), (COUNT(numbers) / (SELECT COUNT(numbers) 
                                 FROM vista
                                 /*your WHERE clause*/)) * 100 AS percent 
FROM vista 
-- your WHERE Statement
GROUP BY numbers
-- your ORDER BY

这是一个sql小提琴,看看它是如何看起来像http://sqlfiddle.com/#!9/08b4e/3

解决方案二 - 这将为您提供一列中的数字,并计算组中的数字和其他的百分比:

 SELECT numbers, CONCAT(CountNum, ' (', percent, '%)') AS counted
 FROM (SELECT numbers, COUNT(numbers) AS CountNum, (COUNT(numbers) / (SELECT COUNT(numbers) 
                                                  FROM vista
                                                  WHERE ID BETWEEN 1 AND 8
                                                  /*your WHERE clause*/)) * 100 AS percent
       FROM vista 
       WHERE ID BETWEEN 1 AND 8
       -- your WHERE clause this is just for a testing purpose
       GROUP BY numbers
       ORDER BY ID) AS srcTable
       -- your ORDER BY clause this is just for a testing purpose

这是小提琴http://sqlfiddle.com/#!9/51275/1

当然你需要插入你的 WHERE 子句而不是我的,我只是把这个用来测试它。 GL希望我帮助一点。