2016-07-21 3 views
0

Я работаю над проектом для загрузочного буфера данных, в котором я работаю, и я работаю с тремя таблицами. В этих таблицах я пытаюсь найти немного больше информации о пользователях в этом наборе данных. Некоторые из вопросов, на которые я хотел бы ответить, - это ...Что не так с моим запросом?

  1. Сколько пользователей используют более одного браузера в своей повседневной жизни?
  2. Каковы наиболее популярные браузеры, используемые помимо firefox?
  3. Что является самым популярным браузером, используемым среди пользователей, использующих несколько браузеров?

прилагается обзор моей таблицы (игнорировать код хрень) data set and tables Это запрос, у меня возникли проблемы с:

select user_id, q2, q3, q4 
from survey 
where q2 = '0' or '1' and q3 = '0' or '1' or '2' or '3' and q4 = '0' or '1' or '2' or '3' or '4' or '5' 

Я хочу, чтобы подтянуть названные значения q2, q3, q4. Как написать это правильно, чтобы он извлекал данные в одном наборе? Я хотел бы потянуть его в один набор, чтобы я мог экспортировать и импортировать в excel и сворачивать данные.

+0

Пожалуйста Покажите пример, как результат должен выглядит как – Jens

+0

Можете ли вы уточнить, что вы имеете в виду _named values_, а также, что не выглядит как действительный SQL. Какие СУБД вы используете? –

+0

'и' имеет приоритет над 'или': используйте' in': 'где q2 in ('0', '1') и q3 in ('0', '1', '2', '3') и q4 в ('0', '1', '2', '3', '4', '5') '. – trincot

ответ

4

Две проблемы:

  1. Непонимание оператора старшинства - Если вы оба and и or убедитесь, что вы правильно завернуть с () ..
  2. Compile ошибка - между каждым or необходимо указать еще раз сравнение. q3 = '0' or '1' не будет работать -> изменение q3 = '0' or q3 = '1'

Итак:

select user_id, q2, q3, q4 
from survey 
where (q2 = '0' or q2 = '1') 
and (q3 = '0' or q3 = '1' or q3 = '2' or q3 ='3') 
and (q4 = '0' or q4 = '1' or q4 = '2' or q4 = '3' or q4 = '4' or q4 = '5') 

Теперь, красивый способ сделать это состоит в использовании in

select user_id, q2, q3, q4 
from survey 
where q2 in ('0','1') 
and q3 in ('0','1','2','3') 
and q4 in ('0','1','2','3','4','5') 
+0

Спасибо за объяснение. Это очень помогло. «In» для меня новичок, похоже, я буду использовать его в этом проекте благодаря вам и trincot. –

+0

@ JakeGirouard - приветствую :) –

+0

Я не вижу, как ваш # 1 является логической ошибкой, больше похожей на непонимание приоритета оператора. – onedaywhen

3

Дело в том, что это неправильно с вашим запросом состоит в том, что вы не можете написать q2 = '1' or '2'. Это недопустимый синтаксис. Используйте in вместо:

where q2 in ('0','1') and q3 in ('0','1','2','3') and q4 in ('0','1','2','3','4','5') 
+0

Спасибо! Я еще не использовал «in». Это замечательно. –

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