将查询中的表拆分为多个表(使用“DISTINCT”)

时间:2014-07-11 10:49:44

标签: mysql sql

查询

SELECT DISTINCT code, hour(datetime), sum(price)
FROM something
ORDER BY code;

我有一个包含3列codehoursum的结果表。

我希望拥有尽可能多的表,因为有不同的code

代码=表格,每个表格包含"代码" (表中的内容相同),"小时"和"总和"。

谢谢。

修改1:

感谢您的回复。 我不想要UNION表,根本不想。

@Gordon Linoff:我忘了说它是分析数据库(Infinidb)所以我知道它不是关系数据库的正确方法。

我想这样做是为了避免有很多疑问。 (一个查询比许多查询更快)

我有什么:

enter image description here

我想要的是:(没有每张桌子,只是为了展示)

enter image description here

4 个答案:

答案 0 :(得分:2)

首先,您的查询更适合写为:

SELECT code, hour(datetime), sum(price)
FROM something
GROUP BY code, hour(datetime)
ORDER BY code;

如果要为每个代码分别创建一个结果表,则需要单独创建表。基本陈述是:

CREATE TABLE table_code1 as
    SELECT code, hour(datetime) as hour, sum(price) as price
    FROM something
    WHERE code = 'code1'
    GROUP BY hour(datetime);

您需要将其放在所有代码的循环中,并为代码使用预准备语句。

然而,我真的没想到你为什么会这样想的理由。直接使用查询或将所有代码摘要放在单个表中更有意义。事实上,在数据库中拥有多个具有相同结构的表通常是数据库设计不佳的标志。

答案 1 :(得分:0)

使用union语句进行concat multiple query

SELECT column_name(s) FROM table1 UNION SELECT column_name(s) FROM table2;

答案 2 :(得分:0)

我能想到的两种方式:

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    [(create_definition,...)]
    [table_options]
    select_statement

INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
    [INTO] tbl_name [(col_name,...)]
    SELECT ...

在这两种情况下,您都是从something中选择所需信息并将该结果保存到表格中。

答案 3 :(得分:0)

您可以使用CURSOR-FETCH-NEXTcode表中选择不同的something值。见CURSOR syntax。在光标内部,按当前SELECT值执行code