我有两张表如下
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
答案 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;
这两个表都加入,然后首先按状态ASCending排序,其次按功耗DESCendingly排序。这意味着它将按每个州的降序排序。
答案 1 :(得分:1)
您需要对第二个表应用过滤器以仅返回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;
答案 2 :(得分:0)
这很简单。你有没有尝试解决这个问题?
Select data.state, company.name, data.powerconsumption
From company
inner join data on data.companyid =company.companyid