Java 在单个列中分组的SQL总计
我有一个类似于[MainTable]的SQLite表: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
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次。(编辑)我对我的答案补充了一点。不确定这是否能满足你的需要,但这是另一种不用工会的方式。