Java 在单个列中分组的SQL总计

Java 在单个列中分组的SQL总计,java,sql,sqlite,Java,Sql,Sqlite,我有一个类似于[MainTable]的SQLite表: Date | Machine | Product | Scrap --------------------------------------- 2012-02-06 | M1 | P1 | 100 2012-02-06 | M2 | P1 | 110 2012-02-06 | M2 | P2 | 200 2012-02-07 | M3 | P

我有一个类似于[MainTable]的SQLite表:

Date        | Machine | Product | Scrap
---------------------------------------
2012-02-06  | M1      | P1      | 100 
2012-02-06  | M2      | P1      | 110 
2012-02-06  | M2      | P2      | 200 
2012-02-07  | M3      | P3      | 300
我想得到一个查询,它可以生成这样的输出:

Type         | Total         | Scrap
------------------------------------
Machine      | M1            | 100
Machine      | M2            | 310
Machine      | M3            | 300
Product      | P1            | 210
Product      | P2            | 200
Product      | P3            | 300
Date         | 2012-02-06    | 410
Date         | 2012-02-07    | 300
Date-Machine | 2012-02-06 M2 | 310
我的问题是,如果我使用UNION ALL来获取总数,那么查询查询会多次进入[MainTable]。 我想在一次查找中计算所有总数,以提高使用SQLite查询而不是java代码的速度


我只需要在SQLite中使用,而不需要在另一个引擎上使用。

创建一个包含Type、Total和scrape列的新表,然后使用以下单独的SQL语句插入所需的数据:

SELECT "machine" as type, machine, sum(scrap) 
from yourFirstTable
UNION
SELECT "product" as type, product, sum(scrap) 
from yourFirstTable
第一步:用以下列创建一个新表:(类型、总数、报废)

第二步:运行以下语句:

INSERT INTO newTable 
SELECT "machine" as type, machine, sum(scrap) 
from yourFirstTable;

INSERT INTO newTable 
SELECT "product" as type, product, sum(scrap) 
from yourFirstTable;
或者,如果您需要在一个查询中完成这些操作,您可以执行以下操作:

SELECT "machine" as type, machine, sum(scrap) 
from yourFirstTable
UNION
SELECT "product" as type, product, sum(scrap) 
from yourFirstTable
等等

您还可以多次连接到同一个表,并得到如下相同的结果:

SELECT TYPE, ITEM, sum(scrap) as sumTot
FROM   (SELECT "machine" as type, machine as item,  scrap from yourFirstTable) as A,
       (SELECT "machine" as type, product as item,  scrap) as B
GROUP BY TYPE, ITEM

感谢您的回复,但在您的示例中,您多次查阅[yourFirstTable]。我的问题是,是否有可能只使用一个“fromYourFirstTable”进行查询。在您的示例中,您在表中查找了4次。(编辑)我对我的答案补充了一点。不确定这是否能满足你的需要,但这是另一种不用工会的方式。