2017-01-30 4 views
0

私は実行したいクエリを持っていますが、リスト内に複数のIDがあります。以下はサンプルコードです:SQLでリストを反復する

`SELECT avg(t1.Percentage) 
    FROM 
    (
    SELECT 
     checkins.id_user as userID, 
     count(checkins.id_check_in) as Aantal, 
(SELECT COUNT(events.id_event) 
      FROM 
      events 
      WHERE events.id_event_group = 146 
      AND `start` > '2014-01-01 00:00:00') as AantalEvents, 
count(checkins.id_check_in)/(SELECT COUNT(events.id_event) 
      FROM 
      events 
      WHERE events.id_event_group = 146 
      AND `start` > '2014-01-01 00:00:00') as Percentage 
    FROM 
checkins 
    LEFT JOIN events ON 
events.id_event = checkins.id_event 
    WHERE checkins.id_user IN(
     SELECT checkins.id_user as userID 
     FROM checkins 
     WHERE id_event = **26276**) # < This is the ID that I want to change through a list) 
      AND events.id_event_group = 146 
      GROUP BY checkins.id_user)t1 ;` 

私は私が別のクエリ(IDのリスト)と定義リストに基づいて、変更したいIDを強調しました。これはSQLでも可能ですか? DBeaverをツールとして使用しています。

+0

データベースは何ですか?両方ともSQL ServerでもMySQLでもかまいません。 –

+0

申し訳ありませんが、MySQLです。 –

答えて

1

SQLは「セット」の原則に基づいて動作します。つまり、selectステートメントで関数を実行すると、そのステートメントによって返されたすべての行で実行されます。

これは、inステートメントまたは派生テーブルを使用してクエリをフィルタリングするための値リストを指定するだけでは、そのリストの各行ごとに対応する値が返されることを意味します。

あなたが行うことができますid_event値の静的リストがある場合:あなたができる、

where id_event in(1,2,3,4,etc) 

を、彼らはあなたがイベントのリストを取得するためにフィルターのセットを適用するテーブル内にある場合、ちょうどあなたのクエリにinner joinを追加します。

select Columns 
from OtherTables 
    inner join checkins 
     on <join condition 1> 
      and <join condition 2> 
      and <checkin filter 1> 
      and <checkin filter 2> 

編集明確化した後

SQLの集計を追加するために、データのグループ化に取り組んでいます。次のようなもの一切グループ化が適用されていないとして返されるデータセット全体集約されます:このような何かがあなたに各ID値の合計を与えるのに対し

select sum(Col) as Total 
from Table 

を:

select ID 
     ,sum(Col) as Total 
from Table 
group by ID 
+0

私はこれを理解している、おそらく私は間違って自分の質問をフレーム。 id_eventごとに個別の結果(つまり計算)が必要です。 INを使用すると、すべてのイベントが一緒に追加されます。それは理にかなっていますか? –

+0

'id_event'を' select'リストに追加し、 'group by'を追加すると、それぞれの' id_event'値で集計結果を得ることができます。私はこれを反映するために私の答えを編集しました。 – iamdave

+0

私は既に上記のグループ化関数を使用しています。基本的には、私は一連のユーザーについて物事を計算したいと思います。そのユーザーのセットは、彼らが行ったイベントに基づいています。毎回別のユーザーを対象に計算を行いたいと思っています。だからあなたが示唆していることは、残念ながら働かないでしょう。 –