1

列 B および/または列 C の 2 つの列のいずれかに検索値を含むテーブルがあります。列 A に基づいて、選択した検索値 (x など) が何回出現するかを示す要約を作成したいと考えています。人ごとにどちらかの列。両方の列の合計を数えたい。

+--------+------+----+
|  name  | B    | C  |
+--------+------+----+ 
| john   | x    | z  |
| john   | x    | x  |
| john   | y    | x  |
| peter  | x    | z  |
| peter  | x    | z  |
| amanda | x    | x  |
| amanda | x    | x  |
| amanda | x    | x  |
| amanda | x    | y  |
| amanda | x    | y  |
+--------+-----------+

上記の例では、私の検索値が x であると仮定すると、列 B および/または列 C の各人物に対して x が何回出現するかを数えたいと考えています。また、総計を生成し、次の出力を生成したいと考えています。

Name   B  C

john   2  2
peter  2  0
amanda 5  3
total  9  5

次のように、列ごとに個別に実行できます。

     SELECT name, COUNT(*) as count FROM table 
          WHERE A = 'x'
          GROUP BY name
          ORDER BY count DESC";

     SELECT name, COUNT(*) as count FROM table 
          WHERE B = 'x'
          GROUP BY name
          ORDER BY count DESC";

次に、それぞれの出力に対して個別のフェッチを実行してそれらを結合することをループできますが、2 つの列に対して 1 つの mysql ステートメントでチェックとカウントを行う方法があるかどうか知りたいですか?

4

5 に答える 5

2

各列の合計が個別に必要な場合は、次を使用できます( SQL Fiddle ):

(
  SELECT MTA.Name, Sum(MTA.B = 'x') AS BSum, Sum(MTA.C = 'x') AS CSum
  FROM MyTable MTA
  GROUP BY MTA.Name
)
UNION
(
  SELECT 'Total' AS name, Sum(MTB.B = 'x') AS BSum, Sum(MTB.C = 'x') AS CSum
  FROM MyTable AS MTB
)

または、両方の列の合計を結合したい場合は、次のようなことを行うことができます ( SQL Fiddle ):

(
  SELECT MTA.Name, Sum(MTA.B = 'x') + Sum(MTA.C = 'x') AS PersonTotal
  FROM MyTable MTA
  GROUP BY MTA.Name
)
UNION
(
  SELECT 'Total' AS name, Sum(MTB.B = 'x') + Sum(MTB.C = 'x') AS PersonTotal
  FROM MyTable AS MTB
)
于 2013-10-23T02:35:50.100 に答える
1
select...
case count (when A = 'x' then A else null) end,
case count (when B = 'x' then B else null) end
...

編集:おっと、カウントを省略しました...

于 2013-10-23T02:30:20.070 に答える
1
SELECT name, 
COUNT(CASE WHEN B='x' THEN 1 ELSE 0 END) as B,
COUNT(CASE WHEN C='x' THEN 1 ELSE 0 END) as C FROM table 
GROUP BY name;
于 2013-10-23T02:32:15.847 に答える
1
SELECT name, sum(if(B='x',1,0)) as c1, sum(if(C='x',1,0)) as c2FROM table 
WHERE A = 'x'
GROUP BY name
ORDER BY c1 desc, c2 desc
于 2013-10-23T02:32:38.473 に答える
1

MySQL ショートカット、

SELECT Name,
       SUM(B='x') TotalX,
       SUM(C='x') TotalY
FROM   TableName
GROUP  BY Name
于 2013-10-23T02:35:21.220 に答える