0

メールアドレスとユーザーの都市を保存する「データ」という名前のテーブルがあり、最も人気のあるメールドメインを見つけたいと考えています。次のクエリを使用して、最大値を持つ行を見つけます。私のテーブルの例:

Email           Name        City
dsmks@gmail.com     John    California
sak@gmail.com       Leo sydney
dsnk@gmail.com      Ross    NY
askd@yahoo.com      Ronny   Canberra
ajs@yahoo.com       Monty   London
kasl@yahoo.com      Jim washington
uy@hotmail.com      Finn    Las vegas

このクエリを使用して答えを計算しました

  select  x.city, x.No_of_People from (select e.city, count(e.city) as No_of_People from data e group by  e.city) x
where  x.No_of_People = (select max(x2.No_of_People) from (select e2.city, count(e2.city) as No_of_People from data e2 group by         e2.city) x2)

ただし、複数の行が返されないため、制限を使用したくありません。したがって、この回答を使用して次のクエリを使用しました

    select
  x.substring_index (email,'@',-1),
  x.No_of_Users
from
  (select
    e.substring_index (email,'@',-1), 
    count(e.substring_index (email,'@',-1)) as No_of_Users
  from
    data e
  group by 
    e.substring_index (email,'@',-1)) x
where
  x.No_of_Users = 
    (select
      max(x2.No_of_Users)
    from
      (select
         e2.substring_index (email,'@',-1),
         count(e2.substring_index (email,'@',-1)) as No_of_Users
      from
         data e2
      group by 
        e2.substring_index (email,'@',-1)) x2)

私が使用しているクエリは、「FUNCTION e2.substring_indexが存在しません」というエラーを出しています。助けて。

4

1 に答える 1

3

関数を使用するための構文が間違っています。エイリアスは、関数ではなく列に配置されます。たとえば、最後のサブクエリは次の構文を使用する必要があります。

  from (select substring_index(e2.email,'@',-1) as strind,
               count(substring_index(e2.email,'@',-1)) as No_of_Users
        from data e2
        group by substring_index (e2.email,'@',-1)
       ) x2

最初の列にも名前を付けたので、必要に応じてサブクエリの外で参照できます。

文字列内の出現回数をカウントするには、次のトリックを使用します。

(length(e2.email) - length(replace(e2.email, '@', '')) as numAmpersands
于 2012-09-24T13:16:17.097 に答える