我正在尝试对结果进行排序,但我的订单却被忽略了...我理解为什么,但不知道如何修复它。这是我的代码:
SELECT
result.station_id as 'Station ID',
result.date as 'Date',
result.id as 'ID',
COALESCE(sum(if(result.parameter = '1', result.result, NULL)),'-') as 'RESULT A)',
COALESCE(sum(if(result.parameter = '2', result.result, NULL)),'-') as 'RESULT B)',
FROM (
SELECT
event.station_id,
event.date,
event.id,
e_result.result
FROM event
Inner Join e_result ON e_result.id = event.id
WHERE
(event.station_id = '0001') AND `devent`.`date` >= '1999-02-08' AND `event`.`date` <= '2011-12-20') as result
GROUP BY by result.id
ORDER BY
result.station_id ASC,
result.date DESC
它正确分组但后来没有对结果进行排序......似乎是对分组进行排序。我需要在分组完成后排序的整个结果集(不是每个分组)
示例输出:
Station Date ID Result A Result B
20 7/6/2009 g003 - 3
12 2/8/1999 g000 19.2 -
12 2/8/1999 g001 19.9 -
12 2/14/1999 g002 19.1 -
17 4/9/2003 i001 22.2 4
应该是
Station Date ID Result A Result B
12 2/14/1999 g002 19.1 -
12 2/8/1999 g000 19.2 -
12 2/8/1999 g001 19.9 -
17 4/9/2003 i001 22.2 4
20 7/6/2009 g003 - 3
表:
e_result id, parameter, result
g002, 1, 19.1
g000, 1, 19.2
g001, 1, 19.9
i001, 1, 22.2
i001, 2, 4
g003, 2, 3
event station_id, date, id
20, 7/16/2009, g003
12, 2/8/1999, g000
12, 2/8/1999, g001
12, 2/14/1999, g002
17, 4/9/2003, i001
答案 0 :(得分:1)
好吧,我可以看到你不明白group by
是如何运作的。分组时,您会丢失单个记录并将它们放在一个包中,这样您就可以执行聚合功能,例如count
,sum
等。因此,根据经验,如果如果您选择的是非聚合字段,则应将其放在group by
子句中。
在你的例子中,你没有使用任何聚合函数,为什么要分组?
此外,您遇到了数据类型问题。查询中的station_id
似乎是一个字符串,而输出中似乎是一个整数。另一种方式是你的约会。我敢打赌,你正在使用字符字段而不是那些字段的相应数据类型,并且你将它们作为字符字段进行排序。
答案 1 :(得分:1)
我已将您的查询放入sqlfiddle,但必须进行大量调整才能使其正常工作。
这是一个产生所需结果的查询:
select result.station_id as 'Station ID',
date_format(result.date,'%c/%m/%Y') as 'Date',
result.id as 'ID',
if (sum(if(result.parameter = 1, result.result,0)) = 0,
null,
sum(if(result.parameter = 1, result.result,0))) as 'RESULT A)',
if (sum(if(result.parameter = 2, result.result,0)) = 0,
null,
sum(if(result.parameter = 2, result.result,0))) as 'RESULT B)'
from
(SELECT
event.station_id,
event.date,
event.id,
e_result.result,
e_result.parameter
FROM event
Inner join e_result ON e_result.id = event.id) as result
group by
result.station_id, result.date, result.id
order by
result.station_id ASC,
result.date DESC;
我重做了coalesce,我删除了内部表结果中的where子句,更正了'devent'错误,将参数字段添加到内部表中。和其他一些事情
这给出了:
STATION ID DATE ID RESULT A RESULT B
12 2/02/1999 g002 19.1
12 2/02/1999 g000 19.2
12 2/02/1999 g001 19.9
17 4/04/2003 i001 22.2 4
20 7/07/2009 g003 3
答案 2 :(得分:0)
您的查询没问题,但最后遗漏了最后一个函数:
GROUP BY
result.station_id