MySQL调优 - 需要太多的SUM(例如......那么......结束)

时间:2016-05-07 12:51:23

标签: mysql optimization case-when

我有大桌子

customer_id ; category ; quantity  ;budget     ; profit
      15570 ; garden   ;  1.000,00 ;  1.325,00 ;     59,94
      17090 ; cars     ;  9.600,00 ; 11.671,76 ;   -409,28
      10360 ; cars     ; 12.110,00 ;  3.981,60 ;    961,97
      10360 ; garden   ; 10.150,00 ;  4.828,95 ;    872,27
      16460 ; toys     ; 24.000,00 ; 19.656,00 ;    991,00
      18260 ; metal    ; 24.000,00 ; 17.688,00 ; -1.131,52
...

和此查询查找每个类别的数量,预算,利润

SELECT customer_id,

(SUM(CASE WHEN category = 'garden' THEN budget END)) as budget1, 
(SUM(CASE WHEN category = 'garden' THEN quantity END)) as quantity1,
(SUM(CASE WHEN category = 'garden' THEN profit END)) as profit1,

(SUM(CASE WHEN category = 'cars' THEN budget END)) as budget2, 
(SUM(CASE WHEN category = 'cars' THEN quantity END)) as quantity2,
(SUM(CASE WHEN category = 'cars' THEN profit END)) as profit2,

(SUM(CASE WHEN category = 'toys' THEN budget END)) as budget3, 
(SUM(CASE WHEN category = 'toys' THEN quantity END)) as quantity3,
(SUM(CASE WHEN category = 'toys' THEN profit END)) as profit3,

(SUM(CASE WHEN category = 'metal' THEN budget END)) as budget4, 
(SUM(CASE WHEN category = 'metal' THEN quantity END)) as quantity4,
(SUM(CASE WHEN category = 'metal' THEN profit END)) as profit4

SUM(budget) as budget, 
SUM(quantity) as quantity,
SUM(profit) as profit

FROM `sales` GROUP BY customer_id

是否有可能使查询更快(更高效)?

1 个答案:

答案 0 :(得分:1)

我怀疑它对性能有多大影响,但我会将查询视为......

$scope.posAleatoire()

...并处理表示层中的任何剩余显示问题。