需要单个SQL查询

时间:2013-12-07 13:25:46

标签: 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

我希望有一个查询,列出每个州的公司在1月份的功耗(从最高到最低)。所以上述数据的结果将是

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

3 个答案:

答案 0 :(得分: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排序。这意味着它将按每个州的降序排序。

答案 1 :(得分:1)

您需要对第二个表应用过滤器以仅返回1月记录。

然后,您需要将公司表(t1)中的行链接到功耗表(t2)。链接是通过关键字JOIN完成的。联接有不同的风格,但您感兴趣的类型是INNER JOIN。 “我只想要在两个表中都存在行。”作为联接的一部分,您需要描述应如何匹配行。这是ON说明符(如果密钥有多个部分,则可能还包括ANDOR。)

除非您明确指定,否则查询的结果没有顺序。我不关心您可能会注意到的是,每次运行查询时它们都以相同的顺序返回。如果没有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;

答案 2 :(得分:0)

这很简单。你有没有尝试解决这个问题?

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