2015-04-12 57 views
0

我是一个完整的newb,所以原谅我。mysql:以标题显示多个结果

我试图让结果显示2个或更多不同的标题。

SELECT sum(fare) AS totalfare, count(*) AS fare10 
where fare>10 
FROM tbl 

我试图让WHERE声明仅适用于count,而不是sum,并有结果显示为“totalfare”“fare10

SELECT sum(fare) AS totalfare 
FROM tbl 
union 
SELECT count(*) AS watever 
FROM tbl 
where fare > 10 

我已经试过这种方式,但结果网格会将1题下的答案吐出为总费用。是否有可能将其显示为totalfare | whatever

+1

'哪里''从'开始'后面。我认为这是一个印刷错误,并投票结束。 –

+0

谢谢大家。你们很棒。我是一个全新的自学者。 :) – groo

回答

0

你想有条件聚集:

SELECT sum(fare) AS totalfare, 
     sum(case when fare > 10 then 1 else 0 end) as fare10 
FROM tbl; 

在MySQL中,你还可以缩短这:

SELECT sum(fare) AS totalfare, 
     sum(fare > 10) as fare10 
FROM tbl; 
+0

哇谢谢。一个后续问题是为什么这个声明将票价总和(票价> 10)作为票价10,计算入口数> 10,而不是仅将票价值> 10的总和计算在内? – groo

+0

@groo。 。 。因为'票价> 10'是一个布尔表达式。 MySQL将数字上下文中的布尔表达式视为整数,其中0代表假,1代表真。 –

+0

@groo。 。 。作为OP,您有权接受您喜欢的任何答案。但读过这个问题的任何人都应该意识到,从易于编写和更好的性能(它只读取表格一次并汇总一次结果)这个方面来看,这个答案更好。 –

1

最后你解释了你的问题。只有在具有相同字段的表(结果集)时才能执行UNION。这是你需要的。上面的查询直接从两个子查询创建的派生表中选择。

SELECT 
    * 
FROM 
    (SELECT 
     SUM(fare) AS totalfare 
    FROM 
     tbl) a, 
    (SELECT 
     COUNT(*) AS watever 
    FROM 
     tbl 
    WHERE 
     fare > 10) b 

你会得到结果一行

[ totalfare | watever ] 
    number  number 
+0

谢谢。我开始看到它是如何工作的。 – groo