2014-09-11 6 views
0

Я хочу узнать процент людей, возраст которых превышает 5 в 2012 году в летнем семестре в разных местах. Я написал SQL, но он дал ошибку. Я не нахожу ошибки. Пожалуйста, кто-то поможет мнеЯ написал SQL, но он дал ошибку

SELECT Venue, 
100*COUNT 
    (SELECT DISTINCT hid, 
    q1 FROM raw_data 
    WHERE q2 > 5 
    AND Year=2012 
    AND Semester='summer' 
    GROUP BY Venue) 
    /(SELECT DISTINCT hid,q1 
    FROM raw_data 
    WHERE Year=2012 
    AND Semester='summer' 
    GROUP BY Venue) 
AS "%" 
FROM raw_data 
WHERE Year=2012 
AND Semester='summer' 
GROUP BY Venue 
+0

Аргумент 'COUNT()' должен быть ' * 'или выражение, которое возвращает один столбец, это не может быть оператор SELECT. – Barmar

ответ

1
SELECT t2.Venue, 100*IFNULL(t1.ct, 0)/t2.ct AS '%' 
FROM (
    SELECT Venue, COUNT(DISTINCT hid, q1) AS ct 
    FROM raw_data 
    WHERE q2 > 5 
    AND Year = 2012 
    AND Semester = 'summer' 
    GROUP BY Venue) AS t1 
RIGHT JOIN (
    SELECT Venue, COUNT(DISTINCT hid, q1) AS ct 
    FROM raw_data 
    WHERE Year = 2012 
    AND Semester = 'summer' 
    GROUP BY Venue) AS t2 
ON t1.Venue = t2.Venue 

Я использую RIGHT JOIN так мы получим 0% для мест, которые не имеют людей старше 5.

+0

Это показывает предупреждение # 1052 - Column 'Место' в списке полей неоднозначна Но мои табличные поля ID \t избавились \t user_id \t спрятался \t q1 \t q2 \t q3 \t q4 \t q5 \t Q6 \t q7 \t q8 \t \t q9 q10 q11 \t \t \t q12 q13 q14 \t \t \t Место семестр \t \t Год completed_sta tus \t is_completed \t is_delete \t status – Noushad

+0

Мне нужно было указать 't2.Venue' во внешнем предложении SELECT. – Barmar

+0

Не могли бы вы объяснить это на самом деле, я новичок в разделе SQL, поэтому я не получаю ваш термин .... извините за это раздражение ... – Noushad

Смежные вопросы