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

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

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

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

Q&A

解決済

2回答

302閲覧

SQLのgroup byについて

mikaaa

総合スコア24

SQL

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

0グッド

0クリップ

投稿2019/02/14 02:42

SQLで以下の構文を記載するとkey変数の重複がでます。
どこが間違っているでしょうか?
group byするとkey変数における重複はなくなるとの想定でしたが・・・・

以下の文で記載すると、Xの重複ができてしまいます。。。
proc sql;
create table B as /★JOIN★/
SELECT
unikey2
,MAX(CASE WHEN t1.ke_Zokugara_1 = 1 THEN 1 ELSE 0 END) AS ke_Zokugara_1
,MAX(CASE WHEN t1.ke_Zokugara_0 = 1 THEN 1 ELSE 0 END) AS ke_Zokugara_0
,MAX(CASE WHEN t1.ke_Zokugara_2 = 1 THEN 1 ELSE 0 END) AS ke_Zokugara_2
,MAX(CASE WHEN t1.ke_Zokugara_3 = 1 THEN 1 ELSE 0 END) AS ke_Zokugara_3
,MAX(CASE WHEN t1.ke_Zokugara_4 = 1 THEN 1 ELSE 0 END) AS ke_Zokugara_4
,MAX(CASE WHEN t1.ke_Zokugara_5 = 1 THEN 1 ELSE 0 END) AS ke_Zokugara_5
,MAX(CASE WHEN t1.ke_Zokugara_6 = 1 THEN 1 ELSE 0 END) AS ke_Zokugara_6
,MAX(CASE WHEN t1.ke_Zokugara_7 = 1 THEN 1 ELSE 0 END) AS ke_Zokugara_7
,MAX(CASE WHEN t1.ke_Zokugara_8 = 1 THEN 1 ELSE 0 END) AS ke_Zokugara_8
,MAX(CASE WHEN t1.ke_Zokugara_9= 1 THEN 1 ELSE 0 END) AS ke_Zokugara_9
,SUM(CASE WHEN t1.ke_shushin_sum = 1 THEN 1 ELSE 0 END) AS ke_shushin_sum
,ke_yourou_sum
,ke_iryo_sum
,ke_nenkin_sum

FROM A as t1

Group by X
;
QUIT;

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

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

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

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

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

m.ts10806

2019/02/14 02:46

コードはマークダウンのcode機能を利用してご提示ください。 ※マークダウンについては質問投稿・編集画面のタブをクリックすると色々使い方が出てきます。 また、実際のテーブル定義、データのサンプルなどあったほうが回答者も再現確認、調整がしやすくなるので的確な回答も得やすくなります。 「key変数」というのも何を指しているのか他の人には伝わりづらいと思います(おそらく一般的に使われているものではないので)
mikaaa

2019/02/14 02:52

言葉足らずですいません。group byで使用している変数について重複が出た結果となってしまいました。
sazi

2019/02/14 02:56

DBMSを明示して下さい。 mysqlとかだと設定によってはエラーになりませんが、通常はgroupby していない項目をselect するとエラーなので。
mikaaa

2019/02/14 03:02

SASで扱っております、 group byしていない変数はselect文に書くべきではないのですね・・・ 承知しました!
sazi

2019/02/14 03:07

SAS/ACCESS Interface to ??? 上記?部分は何ですか? SASは使ったことないんですが、SQLはSASの独自解釈かどうかはご存知ですか?
m.ts10806

2019/02/14 03:12

質問は編集できるので適宜ご対応いただければと
mikaaa

2019/02/14 03:15

SASのEnter prise guideを使用しています。
sazi

2019/02/14 03:48 編集

接続しているデータベースの種類は何ですか?(oracleとかsqlserverとか)
mikaaa

2019/02/14 04:05

DB2やoracleとのことです。
sazi

2019/02/14 04:11

ん?定まっていないという事ですか? DBMSが変わっても問題無いというなら、SQLの文法違いはSASが吸収していることになるはずですが、 SASという製品自体はSQLを意識しなくても良いみたいですね。 直接SQLを発行する機能を利用されているならDBMSは意識する必要があると思うのですが?
mikaaa

2019/02/14 04:25

そうですね、定まっていないみたいです。。 DBMSまわりのことは勉強不足なのでが、、SQLの発行とか必要なんですね・・・
guest

回答2

0

SELECT文の中でXが明示されていないとGroup byに利用することはできません

投稿2019/02/14 02:47

yambejp

総合スコア114814

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

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

mikaaa

2019/02/14 02:53

ご回答ありがとうございます、selectにXを記載しても重複が出てしまいます。 重複がでないようにするにはどうしたらよいでしょうか?
yambejp

2019/02/14 02:55

sampleがないので判断できません どういったデータからどういった結果をほしいのか仕様を記載してください
mikaaa

2019/02/14 03:03

すいません、解決しましたので、、ありがとうございます。 group byしていない変数はselect文に書くべきではないということですよね、、
yambejp

2019/02/14 03:07

> group byしていない変数 SQLの種類によりますが、関係ないカラムはgroup byに書けないのが普通です
mikaaa

2019/02/14 03:15

データセットに残しておきたい変数がある場合はどうすればよいでしょうか??
yambejp

2019/02/14 03:25

論理的に書けないので、「データセットに残しておきたい変数」の 定義が間違っているのでは?
mikaaa

2019/02/14 04:06

そうなんですね、、ありがとうございます
yambejp

2019/02/14 04:11

変数というのは何を指しているかもわからないし 結局サンプルと仕様がないとこれ以上のことは判断できないということです
guest

0

ベストアンサー

SASが良く分かりませんが独自のSQLもできるのかもしれません。
SAS 9.3 SQLプロシジャユーザーガイド

2 章 • 1 つのテーブルからのデータの取得
データのグループ化
GROUP BY 句は、指定された 1 つ以上の列によってデータをグループ化します。
GROUP BY 句を使用する場合、SELECT 句または HAVING 句で集計関数も使用し
て、グループごとのデータの要約方法を PROC SQL に指示します。PROC SQL は、グ
ループごとに個別に集計関数を計算します。
1 つ列を基準にグループ化する

次の例では、すべての国の人口を合計して、各大陸の総人口を求めています。

libname sql 'SAS-library';
proc sql;
title 'Total Populations of World Continents';
select Continent, sum(Population) format=comma14. as TotalPopulation
from sql.countries
where Continent is not missing
group by Continent;

group by している項目しかselect 出来ないというのは、一般的なものと同じようですね。

Q&Aは専用コミュニティの方が良いかもしれませんね。
SAS Japan Support Community

投稿2019/02/14 04:18

編集2019/02/14 04:20
sazi

総合スコア25184

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

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

mikaaa

2019/02/14 04:23

ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問