10

最近、チェックボックスで満たされたフォームに接続された MYSQL データベースをセットアップしました。チェックボックスが選択されている場合、関連する列に値「1」が挿入されます。それ以外の場合は、'0' の値を受け取ります。

最終的にこのフォームから集計データを確認したいのですが、MYSQL を使用して、値が「1」の行の数に等しい各列の数値を取得する方法があるかどうか疑問に思っていました。 .

私は次のバリエーションを試しました:

select count(*) from POLLDATA group by column_name

これはうまくいきませんでした。他に思いつくものは何もありません (確かに、私は SQL の経験があまりありません)。

私は本当に避けたい:

select count(*) from POLLDATA where column_1='1'

列ごとに (100 近くあります)。各列に select count(*) ステートメントを入力する以外にこれを行う方法はありますか?

編集:

参考になれば、列は「artist1」、「artist2」、....「artist88」、「gender」、「age」、「city」、「state」です。以下で説明しようとしたように、次のようなことができることを望んでいました。

select sum(EACH_COLUMN) from POLLDATA where gender='Male', city='New York City';

(明らかに EACH_COLUMN は偽物です)

4

6 に答える 6

36
SELECT SUM(CASE 
             WHEN t.your_column = '1' THEN 1
             ELSE 0
           END) AS OneCount,
       SUM(CASE 
             WHEN t.your_column='0' THEN 1
             ELSE 0
           END) AS ZeroCount
  FROM YOUR_TABLE t 
于 2013-11-11T18:17:13.883 に答える
7

列内の 1 の数だけを探している場合は、試してみてください…</p>

select sum(col1), sum(col2), sum(col3) from POLLDATA
于 2013-11-11T18:15:20.780 に答える
1

column_name で POLLDATA グループから count(*) を選択します

私はあなたがカウントをしたいとは思わない.これは0のレコードもカウントする.

試す

 select column_naam,sum(column_name) from POLLDATA group by column_name

また

select column_naam,count(*) from POLLDATA 
 where column_name <> 0 
 group by column_name

0のみを追加します

于 2013-11-11T18:31:03.547 に答える
1

少しコンパクトな表記はSUM( IF( expression ) ).

質問者の例では、これは次のようになります。

select
  count(*) as total,
  sum(if(gender = 'MALE', 1, 0)) as males,
  sum(if(gender = 'FEMALE', 1, 0)) as females,
  sum(if(city = 'New York City', 1, 0)) as newYorkResidents
from POLLDATA;

結果の例:

+-------+-------+---------+------------------+
| total | males | females | newYorkResidents |
+-------+-------+---------+------------------+
|    42 |    23 |      19 |               42 |
+-------+-------+---------+------------------+
于 2021-09-20T19:02:10.323 に答える
0

クエリが少し複雑になり始めた場合は、データベースの構造を再考する必要があるためかもしれません。ただし、テーブルをそのまま保持したい場合は、すべての列を指定せずに、すべての合計を自動的に計算する準備済みステートメントを使用できます。

SELECT
  CONCAT(
    'SELECT ',
    GROUP_CONCAT(CONCAT('SUM(', `column_name`, ') AS sum_', `column_name`)),
    ' FROM POLLDATA WHERE gender=? AND city=?')
FROM   `information_schema`.`columns` 
WHERE  `table_schema`=DATABASE() 
       AND `table_name`='POLLDATA'
       AND `column_name` LIKE 'artist%'
INTO @sql;

SET @gender := 'male';
SET @city := 'New York';

PREPARE stmt FROM @sql;
EXECUTE stmt USING @gender, @city;

ここでフィドルを参照してください。

于 2013-11-11T18:55:47.783 に答える