2013-12-07 3 views
-3

У меня есть две таблицы следующим образомодного запроса SQL требуется

companyid name  
1   pwc  
2   dell  
3   microsoft 
4   google  
5   yahoo  
6   twitter 

companyid state  month powerconsumption 

1   newyork  jan 240 
2   california jan 130  
3   arizona  jan 210 
4   texas   jan 130 
5   texas   jan 650 
6   california jan 310 
2   arizona  jan 340 

Я хочу иметь запрос для просмотра списка компаний в каждом государстве с точки зрения потребления энергии (от высшего к низшему) в месяц jan.So результат в случае приведенных выше данных будет

arizona dell  340 
arizona microsoft 210   
california twitter 310 
california dell  130 
newyork pwc  240 
texas  yahoo  650 
texas  google 130 
+1

Это очень простой SQL. Читайте о соединениях и сортировке таблиц, и вы сами можете это понять – Salandur

ответ

3

Попробуйте это:

SELECT t2.state, t1.name,t2.powerconsumption 
FROM table1 t1 
INNER JOIN table2 t2 ON t1.companyId = t2.companyId 
WHERE t2.month = 'jan' 
ORDER BY t2.state ASC, t2.powerconsumption DESC; 

sqlfiddle demo

Это ПРИСОЕДИНИТЕСЬ к обеим таблицам, а затем сортирует сначала по состоянию ASCending, а во-вторых, по потреблению энергии DESCendingly. Это означает, что он будет отсортирован по убыванию для каждого состояния.

+0

вы потрясающий! –

0

Ну, это действительно просто. Вы пытались решить проблему?

Select data.state, company.name, data.powerconsumption 
From company 
inner join data on data.companyid =company.companyid 
1

Вам необходимо применить фильтр ко второй таблице, чтобы возвращать только январские записи.

Вам необходимо связать строки из таблицы компании (t1) с таблицей энергопотребления (t2). Связывание осуществляется через ключевое слово JOIN. Соединения бывают разных вкусов, но тип, который вас интересует, - INNER JOIN. «Мне нужны только строки, которые существуют в обеих таблицах». Как часть вашего соединения, вам нужно будет описать, как строки должны быть сопоставлены. Это спецификатор ON (а также может включать AND и OR в том случае, если имеется несколько частей ключа).

Результаты запросов не имеют порядка, если вы явно не указали их. Меня не волнует, что вы можете заметить в том, что они возвращаются в том же порядке каждый раз, когда вы запускаете запрос. Если нет ORDER BY, то вы не договорная У вас есть результаты в каком-либо заказе. Я сортирую ваши результаты на основе заявленных, а затем название компании, а затем по снижению потребления энергии.

SELECT 
    PC.state 
, C.name 
, PC.powerconsumption 
FROM 
    company C 
    INNER JOIN 
     power_consumption PC 
     ON PC.companyId = C.companyId 
WHERE 
    PC.month = 'jan' 
ORDER BY 
    PC.state ASC 
, C.name ASC 
, PC.powerconsumption DESC; 
Смежные вопросы