ackerchez
ackerchez

Reputation: 1744

using outer alias in mysql subquery

I am writing a mysql query and I have a question. Can I / How do I do something like this:

select rating, user_id, (
    -- in here I want to write a subquery to get the number of times the user_id in the outter query has rated this teacher
) as user_rated_frequency from teachers_rating where teacher_id = id

Essentially I am trying to get data and the frequency in which that user rated that teacher. Is it possible to use an alias from one of the items I want to select in a subquery that is still in the select and not in the where clause?

Upvotes: 11

Views: 42712

Answers (2)

Trinimon
Trinimon

Reputation: 13957

Check out this ...

SELECT rating, 
       user_id, 
       (SELECT COUNT(*) 
          FROM teachers_rating t1 
         WHERE teacher_id = 3 
           AND t1.user_id = t2.user_id) AS user_rated_frequency 
  FROM teachers_rating t2
 WHERE teacher_id = 3;

or that one:

SELECT AVG (rating) AS average_rating, 
       user_id,
       (SELECT Count(*) 
          FROM teachers_rating t1 
         WHERE teacher_id = 3 
           AND t1.user_id = t2.user_id) AS user_rated_frequency 
  FROM teachers_rating t2
 WHERE teacher_id = 3
 GROUP BY user_rated_frequency;

Links above show a SQL Fiddle example assuming that id is 3.

Alternatively you could have a sub query in the FROM clause:

SELECT AVG (t1.rating), 
       t1.user_id,
       t2.user_rated_frequency 
  FROM teachers_rating t1,
       (SELECT tr.teacher_id,
               tr.user_id,
               COUNT(*) AS user_rated_frequency 
          FROM teachers_rating tr
         GROUP BY tr.teacher_id) t2
 WHERE t1.teacher_id = t2.teacher_id
   AND t1.user_id    = t2.user_id
 GROUP BY user_id, user_rated_frequency

Hat a look at this Fiddle.

Upvotes: 23

Andrew
Andrew

Reputation: 8703

You need to move your subquery (technically called a derived table) into your from clause. Something like so:

    select 
    rating, 
    user_id, 

    from teachers_rating,
    (in here I want to write a subquery to get the number of times the user_id in the outter query has rated this teacher) as user_rated_frequency f 
where teacher_id = f.id

Upvotes: -1

Related Questions