1

私はこれを私に与えるmysqlにクエリを持っています

product    count(*)
-------    ---------
A           5
B           2
C           3
D           4
E           1

クエリは次のように単純です

select product,count(*) from dashboard group by product;

ここで問題となるのは、一部の製品の数を他の製品にマージしたいということです。たとえば、期待される出力は次のようになります。

product    count(*)
-------    ---------
A           7
C           3
D           5

したがって、count(A)= count(A)+ count(B)

count(c)= count(C)

count(D)= count(D)+ count(E)

こんなことを考えていた

select case
when product = 'A' OR product = 'B' then ----
when product = 'C' then ----
end
4

2 に答える 2

2

既存の結果をもう一度グループ化します(これには、可能であればインデックスを使用して最初の集計を実行し、次に小さい結果セットよりもはるかに単純な合計を使用して2番目の集計を実行するという大きな利点があります):

SELECT   CASE
           WHEN p IN ('A','B') THEN 'A'
           WHEN p IN ('C')     THEN 'C'
           WHEN p IN ('D','E') THEN 'D'
         END AS product, SUM(c)
FROM     (
           SELECT   product AS p, COUNT(*) AS c
           FROM     dashboard
           GROUP BY p
         ) t
GROUP BY product

sqlfiddleでそれを参照してください。

于 2012-12-18T10:14:44.293 に答える
1

製品への変更をサブクエリに配置できます。

select product, count(*) Total
from
(
  select 
    case
        when product in ('A','B') then 'A'
        when product in ('C')     then 'C'
        when product in ('D','E') then 'D'
     end AS product
  from dashboard
) src
group by product;

SQL FiddlewithDemoを参照してください

于 2012-12-18T10:18:12.990 に答える