バージョン選択

フォーラム

メニュー

オンライン状況

71 人のユーザが現在オンラインです。 (60 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 71
もっと...

サイト内検索

質問 > 管理機能 > 高度な設定のsqlついて

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ecbg
投稿日時: 2009/10/26 15:01
対応状況: −−−
仙人
登録日: 2009/2/25
居住地: 東京
投稿: 387
高度な設定のsqlついて
お世話になっております。

「管理画面」-「コンテンツ管理」-「高度な設定」において、例えば以下のように会員登録時に任意のプルダウンリストから登録して貰った値がdtb_customerのカラム「emp1」,「emp2」,「emp3」に格納してあり、それぞれ1〜80までの値が入っております(それぞれNULLも有ります)。

このときに、3つのカラムを跨いで、1〜80までの各値を選択した会員数を求めたいのですが、どのようなSQL文を作成したら良いのか悩んでおります。

どうかSQLにお強い方お力を貸してくれませんでしょうか?

【PostgreSQL 8.3.7】
seasoft
投稿日時: 2009/10/26 15:42
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7367
Re: 高度な設定のsqlついて
とりあえず、
- UNION
- COUNT(*)
- GROUP BY
辺りの構文を覚えると出来そうな予感。

高度な設定で UNION を使うには、サブクエリにする必要もあるかも(未確認)


----------------
Seasoft
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

ecbg
投稿日時: 2009/10/26 17:47
対応状況: −−−
仙人
登録日: 2009/2/25
居住地: 東京
投稿: 387
Re: 高度な設定のsqlついて
以下の方法でdtb_customerから「emp1」のみを選択した会員数をCOUNTすることはできるのですが、「emp2」,「emp3」に対しても同様にCOUNTするために、どうサブクエリやUNIONを使うのか、完全に煮詰まってしまいました・・・

SELECT
b.name as 項目名,
count(
a.customer_id
) as 会員数
FROM
dtb_customer as a, mtb_emp1 as b
WHERE
a.emp1 = b.id
AND
a.del_flg = 0
GROUP BY
a.emp1, b.name

どうか打開できるアイデアをお持ちの方いらっしゃいましたら、お教え頂けないでしょうか?
ramrun
投稿日時: 2009/10/26 19:39
対応状況: −−−
仙人
登録日: 2006/11/3
居住地:
投稿: 789
Re: 高度な設定のsqlついて
emp1〜emp3が未選択でnullならば、
emp1〜emp3すべてnullのcustomer_idを抽出すればどうにかなるのでは?

勘違いでしたらごめんなさい(汗)。
seasoft
投稿日時: 2009/10/27 1:14
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7367
Re: 高度な設定のsqlついて
TEL を使用した例です。

SELECT a.tel_all, COUNT(*)
FROM
    (
        SELECT *, tel01 AS tel_all FROM dtb_customer
        UNION ALL
        SELECT *, tel02 AS tel_all FROM dtb_customer
        UNION ALL
        SELECT *, tel03 AS tel_all FROM dtb_customer
    ) AS a
GROUP BY a.tel_all


----------------
Seasoft
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

ecbg
投稿日時: 2009/10/28 13:23
対応状況: −−−
仙人
登録日: 2009/2/25
居住地: 東京
投稿: 387
Re: 高度な設定のsqlついて
返信が遅くなり申し訳ありませんでした。
具体例まで記載頂き、本当に有難うございます!

上記で欲しかった「emp1」「emp2」「emp3」の値をカウントできております!
感動しました!
FROM句内にUNION ALLを使うなど、
ひとりで悩んでいても到底思い浮かびませんでした。
しかしながら、SQL中の「a」や「*」がどのように使われているのか、未だに分りません・・・

こういったのを勉強するための参考ページなどご存知でしたら、
お教え頂ければ幸いです!
ecbg
投稿日時: 2009/10/28 13:48
対応状況: −−−
仙人
登録日: 2009/2/25
居住地: 東京
投稿: 387
Re: 高度な設定のsqlついて
FROM句内をひとつひとつみることで要約理解できました!

「tel01」「tel02」「tel03」を含めてカウントするために、
まずそれぞれを抽出した3つ分のテーブル「a」を作成して、
「a」内で3つ全てが含まれた「tel_all」をグループ化した後、
COUNTすることで実現していたんですね!

またSQLの理解が広がりました!
有難うございました。
seasoft
投稿日時: 2009/10/28 14:40
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7367
Re: 高度な設定のsqlついて
個人的に、SQL 文で勉強になったのは、Oracle の公式マニュアルでした。

非常に無機質で無愛想ですが、理路整然としていて、結構好みです。
ただ、とっつきにくい印象も強いですが・・・


単に全体をカウントするだけなら、サブクエリ内の「*, 」は不要ですね。ただし、抽出条件を付ける場合などには役立つのかなと思います。


----------------
Seasoft
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は89,039名です
総投稿数は110,020件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2314
5
umebius
2085
6
yuh
1819
7
h_tanaka
1646
8
red
1570
9
mcontact
1296
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.