0

これが私のテーブル構造です。いつかtable1データを繰り返します(例:実際にはID 1には4行しかないはずですが、重複のために8行になることもあります)ので、重複を避けます選択クエリでGROUP BYコマンドを使用します

表1

|id| website|time|
-----------------
|01|facebook|20.0|
|01|google  |40.0|
|01|youtube |10.0|
|01|ebay    |30.0|
|02|facebook|50.0|
|02|ebay    |50.0|

表 2

    |id|marks|
    ----------- 
    |01|   80|
    |02|   90|
    |03|   70|
    |04|  100|

特定のユーザーの(マーク)(Facebookの時間) 、 ( GoogleとYouTubeの時間のカウント)を選択したい

次の選択クエリは 、ユーザー ID '01' の(マーク)(Facebook での時間)を返します。

同じクエリで id'1' の google と youtube の両方の時間のカウントを受け取る方法は?

SELECT table2.id,table2.marks, table1.time
FROM table1
RIGHT JOIN table2 ON table1.id= table2.id
WHERE table1.website LIKE ('%facebook%')
AND table1.id=  '01'
GROUP BY table1.id, table1.website
4

3 に答える 3

1

時間を見つけて、特定のユーザーfacebookの合計youtubeを見つけたい場合は、mysql を使用してそれを達成できます。googleconditional sum

select
sum(case when t1.website = 'facebook' then t1.time else 0 end) as `fb_time`,
(
  sum(case when t1.website='google' then t1.time else 0 end)+
  sum(case when t1.website='youtube' then t1.time else 0 end)
)
as `google_youtube`,
t2.marks
from table1 t1
join table2 t2 on t1.id = t2.id
where t1.id = '01' 

すべてのユーザーに対して同じことを計算する必要がある場合は、次のように実行できます。

select
t1.id,
sum(case when t1.website = 'facebook' then t1.time else 0 end) as `fb_time`,
(
  sum(case when t1.website='google' then t1.time else 0 end)+
  sum(case when t1.website='youtube' then t1.time else 0 end)
)
as `google_youtube`,
t2.marks
from table1 t1
join table2 t2 on t1.id = t2.id
group by t1.id
于 2014-12-14T06:41:09.170 に答える
0

クエリを正しく理解できれば、サブクエリを使用する必要があると思います。次のサブクエリは 2 つのカウントを返します。time_on_facebook & time_on_google_and_youtube すべてのユーザー

SELECT t1.id, t2.marks, 
COUNT(t1.time) as time_on_facebook, 
(SELECT COUNT(t1_sq.time)
FROM `table1` as t1_sq
WHERE (t1_sq.website = "youtube" OR t1_sq.website = "google") 
AND t1_sq.id = t1.id
GROUP BY t1.id)  as time_on_google_and_youtube 
FROM `table1` as t1
LEFT JOIN table2 t2 ON t2.id = t1.id
WHERE t1.website = "facebook"
GROUP BY t1.id

ユーザー ID = 01 に制限するには、WHERE 句を追加します。

SELECT t1.id, t2.marks, 
COUNT(t1.time) as time_on_facebook, 
(SELECT COUNT(t1_sq.time)
FROM `table1` as t1_sq
WHERE (t1_sq.website = "youtube" OR t1_sq.website = "google") 
AND t1_sq.id = t1.id
GROUP BY t1.id)  as time_on_google_and_youtube 
FROM `table1` as t1
LEFT JOIN table2 t2 ON t2.id = t1.id
WHERE t1.website = "facebook" AND t1.id = 1
GROUP BY t1.id

本当に COUNT(時間) が必要ですか、それとも SUM(時間) が必要ですか? 最後に、両方のテーブルに主キーを追加し、わかりやすくするために「id」列の名前を「user_id」に変更することを検討してください。

于 2014-12-14T06:27:34.217 に答える
0

出力をどのように表示したいかは明確ではありません。クエリを作成しましたが、試しませんでした。試してみて、うまくいくかどうか教えてください。

select t1.id, t1.website, sum(t1.time) as total_time, max(t2.marks) as marks 
from table1 as t1
left join table2 as t2
on t1.id = t2.id
where t1.website = 'facebook'
and t1.id = '01'
group by t1.id, t1.website

UNION

select t1.id, t1.website, sum(t1.time) as total_time, max(t2.marks) as marks 
from table1 as t1
left join table2 as t2
on t1.id = t2.id
where t1.website IN ('youtube', 'google')
and t1.id= '01'
group by t1.id, t1.website
于 2014-12-14T06:27:44.300 に答える