2017-06-27 8 views
0

私は3つのテーブルに人の金の収入があります。ユーザーが金を稼いでいるときは、新しいレコードはe_userf_valueという表のいずれかになります。金の合計値の選択

今、私はすべてのユーザのすべての金を合計して、私は「私の選択も正しい道を進んでいるが、それは私を与える場合はわからない未満1000

select count(e_user) from (
    select count(e_user) from quest_gold union all 
    select count(e_user) from monster_gold union all 
    select count(e_user) from other_gold 
) AS money 

where f_value < 1000 
group by e_user 

を獲得したものを選択したいです未知の文法エラー "があります。何が間違っているのか教えてください。

+1

まず、あなたが**合計**したいが、あなたが使用した**カウント** 。あなたはそれを説明する方法 –

+1

私がしたいことは、お金の合計が1000未満の人の数を取得することです。 – divHelper11

答えて

1

あなたが1000未満のユーザーではなくcount(f_user)をフィルタリングするhaving句を使用することができ、それはsum(f_value)です:1000金少ないし、獲得した

select e_user, sum(f_value) as sum_val 
from (
    select e_user, f_value from quest_gold union all 
    select e_user, f_value from monster_gold union all 
    select e_user, f_value from other_gold 
) as money 
group by e_user 
having sum_val < 1000 
+0

非常に良い。 OP自身のクエリが私を完全に混乱させました。これをまっすぐにするための親指。 –

0

ユーザーが何を得ない人を含める必要があります。したがって:

select u.user, coalesce(earned.gold, 0) as earned_gold 
from users u 
left join 
(
    select e_user, sum(f_value) as gold 
    from 
    (
    select e_user, f_value from quest_gold 
    union all 
    select e_user, f_value from monster_gold 
    union all 
    select e_user, f_value from other_gold 
) all_gold 
    group by e_user 
) earned on earned.e_user = u.user and earned.gold < 1000 
order by u.user; 

あなただけの少ないし、1000年に金を持つユーザーの数をカウントしたい場合:

はすべての
select count(earned.e_user) as poor_users 
from users u 
left join 
(
    select e_user, sum(f_value) as gold 
    from 
    (
    select e_user, f_value from quest_gold 
    union all 
    select e_user, f_value from monster_gold 
    union all 
    select e_user, f_value from other_gold 
) all_gold 
    group by e_user 
) earned on earned.e_user = u.user and earned.gold < 1000; 
関連する問題