質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
COUNT

COUNT は、広く使用されているSQLの関数です。COUNT関数は、行数、もしくは配列のエンティティの数をカウントします。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

1000閲覧

SQLで複数ある同じ形式のカラムをひとまとめにカウントしたいです

hide7010

総合スコア2

COUNT

COUNT は、広く使用されているSQLの関数です。COUNT関数は、行数、もしくは配列のエンティティの数をカウントします。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/10/30 05:56

PHPのMySQLで教えていただきたいことがあります。

一つのテーブルに、同じ形式のカラムが3列存在し、
それぞれ3列の合計がいくつあるかカウントし、
多い順に並べたいと考えております。

TABLE 果物一覧

果物1  果物2  果物3
りんご  みかん  バナナ
バナナ  りんご  すもも
すもも  りんご  みかん
すもも  みかん  りんご

一列しかないデータなら、以下の文で取得できたのですが、複数となるとうまく取れず困っています。

SELECT 果物1,COUNT(果物1) AS FruitsCOUNT FROM 果物一覧 GROUP BY 果物1 ORDER BY FruitsCOUNT DESC

取得結果が

りんご 4
みかん 3
すもも 3
バナナ 2

といった感じになるのが理想です。

どうか、ご教授くださいませ。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2020/10/30 06:00 編集

果物1,2,3という3カラムで持つのはマストなのでしょうか? また1,2,3はかならずユニークな情報なのでしょうか? (りんご、りんご、みかん みたいにならないということ)
Orlofsky

2020/10/30 06:04 編集

SQLをシンプルにパフォーマンス良く実行できるように、データベースのテーブルは データベースの正規化 https://oss-db.jp/measures/dojo_info_04.shtml に沿って設計します。通常第3正規化まで行います。 今回は第1正規化を行います。 現状のまま正規化を無視し続けるとまず破綻するでしょう。
Orlofsky

2020/10/30 06:05

教授 → 教示
hide7010

2020/10/30 06:16

yambejp様 3カラムとは限らず、1カラムや2カラムの情報も混在します。 また、1,2,3はユニークになります。
yambejp

2020/10/30 06:23 編集

hide7010さん、ごめんなさい テーブルの構造をいじっていいですか?という意味です 1カラムや2カラムのデータがあるなら余計テーブル構造を変えたほうが良いと思います とくに1,2,3の間に相関関係がないなら (1は2より前に無いといけないとか、1が空で2にデータをおかなくちゃいけないとか) 正規化すべきです
hide7010

2020/10/30 06:34

Orlofsky様 正規化、勉強します。 ご教示ありがとうございます(照)
sazi

2020/10/30 06:34

1,2,3は必ず全て埋まっているんですか?
hide7010

2020/10/30 06:37

yambejp様 テーブルの構造、いじっても問題ありません。 Orlofsky様もおっしゃってた正規化が重要なのですね。。
hide7010

2020/10/30 06:39

sazi様 1だけのときもありますし、 1と2だけのときもあります。 ただ、1が空白だったり、3があるのに2が空白になることはありません。
sazi

2020/10/30 06:40

正規化するなら、この質問は解決ですよね?
hide7010

2020/10/30 06:46

sazi様 正規化について、私の理解が追いついていないため、なんとも言えませんが sazi様を含め、皆様がおっしゃられているのできっと解決なのだと思います。 勉強して理解してみます!
guest

回答1

0

ベストアンサー

一番単純なのはサブクエリで3列分のデータを1列にまとめてしまうことだと思います。

SQL

1SELECT SUB.果物, COUNT(SUB.果物) AS FruitsCOUNT 2 FROM ( 3 SELECT 果物1 AS 果物 FROM 果物一覧 4 UNION ALL 5 SELECT 果物2 AS 果物 FROM 果物一覧 6 UNION ALL 7 SELECT 果物3 AS 果物 FROM 果物一覧 8 ) SUB 9 GROUP BY SUB.果物 10 ORDER BY FruitsCOUNT DESC

投稿2020/10/30 06:07

ku__ra__ge

総合スコア4524

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2020/10/30 07:15

> 1だけのときもありますし、 > 1と2だけのときもあります。 だそうです。
hide7010

2020/10/30 07:36

ありがとうございます。 ku__ra__ge様のご回答でほしかったデータが取得できました。 本当に助かりました。 また、正規化について教えていただいた皆様方、 改めてそのあたりを勉強いたします。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問