高效的SQL来合并结果还是让客户端浏览器使用javascript?
我想知道,将结果组合成单个结果的最有效方法是什么 我想转身高效的SQL来合并结果还是让客户端浏览器使用javascript?,sql,mysql,performance,pivot,Sql,Mysql,Performance,Pivot,我想知道,将结果组合成单个结果的最有效方法是什么 我想转身 Num Ani Country ---- ----- ------- 22 cows Canada 20 pigs Canada 40 cows USA 34 pigs USA 进入: 我想知道是只使用SQL更好,还是应该将整个查询结果集提供给用户更好。一旦提供给用户,我就可以使用JavaScript将其解析为所需的格式 此外,我不知道如何将其更改为SQL查询的正确格式。我能想到的处理此SQL语句的唯一方
Num Ani Country
---- ----- -------
22 cows Canada
20 pigs Canada
40 cows USA
34 pigs USA
进入:
我想知道是只使用SQL更好,还是应该将整个查询结果集提供给用户更好。一旦提供给用户,我就可以使用JavaScript将其解析为所需的格式
此外,我不知道如何将其更改为SQL查询的正确格式。我能想到的处理此SQL语句的唯一方法是通过动态创建临时表来实现非常迂回的操作。您所追求的操作称为“数据透视”——即:
应该有一种在客户端(php)使用二维数组来实现数据透视的有效方法。为了解决Ken Downs对字节推送的担忧,一个粗糙的原始数据透视表比一个完全物化的二维数据透视表消耗更少的字节,简单的例子是
cows | pigs | sheep | goats | country
1 null null null Canada
null 2 null null USA
null null 3 null Egypt
null null null 4 England
只有4行原始数据(每行3列)
在前端这样做也解决了动态旋转的问题。如果透视列的数量未知,则需要一个MySQL过程为每个列构建一个模式为“MAX(CASE….)”的动态sql语句
在客户端这样做有很多好处
假设你的结果真的那么小,这种优化是完全没有意义的,是浪费你的时间……是的,在服务器上旋转更有效,你不必把所有的字节都推到电线上,只要答案。
SELECT MAX(CASE WHEN t.ani = 'cows' THEN t.num ELSE NULL END) AS cows,
MAX(CASE WHEN t.ani = 'pigs' THEN t.num ELSE NULL END) AS pigs,
t.country
FROM YOUR_TABLE t
GROUP BY t.country
ORDER BY t.country
cows | pigs | sheep | goats | country
1 null null null Canada
null 2 null null USA
null null 3 null Egypt
null null null 4 England