以下の例では、userIdとpassageIdによって最初の2つのスコア値を抽出するテーブルを作成しています。新しいテーブルの各レコードに少なくとも2つのスコアが含まれているレコードを選択するにはどうすればよいですか(スコア2がnullのレコードを無視する)?SQLのnullエントリを無視する
コード:
drop table if exists simon;
drop table if exists simon2;
Create table simon (userId int, passageId int, score int);
Create table simon2 (userId int, passageId int, score1 int,score2 int);
INSERT INTO simon (userId , passageId , score)
VALUES
(10, 1, 2),
(10, 1, 3),
(10, 2, 1),
(10, 2, 1),
(10, 2, 5),
(11, 1, 1),
(11, 2, 2),
(11, 2, 3),
(11, 3, 4);
insert into simon2(userId,passageId,score1,score2)
select t.userId, t.passageId,
substring_index(t.scores,',',1) as score1,
(case when length(t.scores) > 1 then substring_index(t.scores,',',-1)
else null
end
) as score2
from
(select userId,passageId,
substring_index (group_concat(score separator ','),',',2) as scores
from simon
group by userId,passageId) t;
select *from simon2;
これは私が今得るものです:
userId passageId score1 score2
1 10 1 2 3
2 10 2 1 1
3 11 1 1 NULL
4 11 2 2 3
5 11 3 4 NULL
は、これは私が欲しいものです:
userId passageId score1 score2
1 10 1 2 3
2 10 2 1 1
4 11 2 2 3
これは私のためには機能しませんでした。 – SimonRH
エラー/問題は何ですか –
#1064 - SQL構文にエラーがあります。 simon2(userId、passageId、score1、score2)の近くに使用する正しい構文については、MariaDBサーバーのバージョンに対応するマニュアルを確認してください。 – SimonRH