2017-10-29 6 views
4

以下の例では、userIdとpassageIdによって最初の2つのスコア値を抽出するテーブルを作成しています。新しいテーブルの各レコードに少なくとも2つのスコアが含まれているレコードを選択するにはどうすればよいですか(スコア2がnullのレコードを無視する)?SQLのnullエントリを無視する

Example

コード:

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 

答えて

0

ちょうどあなたの周りにこれを追加クエリ

Select * from (......) x where score2 is not null 
+0

これは私のためには機能しませんでした。 – SimonRH

+0

エラー/問題は何ですか –

+0

#1064 - SQL構文にエラーがあります。 simon2(userId、passageId、score1、score2)の近くに使用する正しい構文については、MariaDBサーバーのバージョンに対応するマニュアルを確認してください。 – SimonRH

0

あなたはスコアがscore_1score_2に入るものを指定する順序付けを持っていないので、私はちょうどmin()max()を使用します。

select s.userid, s.passageid, 
     max(score) as score_1, max(score) as score_2 
from simon s 
group by s.userid, s.passageid 
having count(*) >= 2; 

これで、10/2と全く同じ結果は得られません。ただし、group_concat()には注文がないため、結果は任意です。 SQLテーブルは、の順序付けされていないを表します。指定しない限り注文はありません。

あなたが発注したい場合は、としてテーブルを定義します。

Create table simon (
    simonId int auto_increment primary key, 
    userId int, 
    passageId int, 
    score int 
); 

そして適切simonId列を使用しています。

+0

注文を追加すると、あなたが提案するように、nullエントリを無視する方法は? – SimonRH

+0

コメントを明確にしてください。最初に、あなたはどういう意味ですか?「これは10/2の結果とまったく同じ結果にはなりません。次に、提供したソリューションコードを確認してください。あなたが提案したauto_incrementを追加し、あなたのコードを試しましたが、動かすことができません。 – SimonRH

+0

どのように動作しませんか? –

関連する問題