SQLITE按客户和年度列出销售额总和

v440hwme  于 2022-11-24  发布在  SQLite
关注(0)|答案(1)|浏览(148)

我有一个包含此信息的sqlite数据库
| 标识符|件|美元|年份|
| - -|- -|- -|- -|
| 10个|二十五个|一百五十个|小行星2021|
| 10个|二十个|一百六十|小行星2021|
| 10个|二十二个|一百二十|小行星2022|
| 十一|十二|一百三十|小行星2021|
| 十一|10个|100个|小行星2022|
我想得到这个
| 标识符|电脑2021|美元2021年|2022年|美元2022|
| - -|- -|- -|- -|- -|
| 10个|四十五|三百一十|二十二个|一百二十|
| 十一|十二|一百三十|10个|100个|
我得到了这个:
SELECT id, SUM(pcs), SUM(dollars) FROM Table GROUP BY id
但是我找不到方法来分别得到每年的总和。
我试了一下:
SELECT id, (SELECT SUM(pcs) FROM Table WHERE id=id AND year=2021) AS pcs2021, (SELECT SUM(dollars) FROM Table WHERE id=id AND year=2021) AS dollars2021, (SELECT SUM(pcs) FROM Table WHERE id=id AND year=2022) AS pcs2022, (SELECT SUM(dollars) FROM Table WHERE id=id AND year=2022) AS dollars2022, FROM Table GROUP BY id
但它不起作用.....
谢谢你的帮助。

u4vypkhs

u4vypkhs1#

使用:-

SELECT id, SUM(pcs) AS pcs2021, SUM(dollars) AS dollars2021 FROM `Table` WHERE year = 2021 GROUP BY id;

结果:-

  • 注意上面假设year是一个整数,所以你可能需要用单引号括住。
    附加(重新评论)

我的问题是,当我想把不同的列与每年的值的总和
您遇到的一个问题是id=id始终为true,因此您将对该年的所有行求和,而不考虑id,并获得结果(如果语法正确):-

也就是说,当您要与主查询当前正在处理的id进行比较时,id是子查询的id
为此,您可以使用AS子句为主查询给予一个别名,然后引用别名的id so(其中主查询的别名为**a**):-

SELECT 
    id,
    (SELECT sum(pcs) FROM `table` WHERE id=a.id AND year='2021') AS pcs2021,
    (SELECT sum(dollars) FROM `table` WHERE id=a.id AND year='2021') AS dollars2021, 
    (SELECT sum(pcs) FROM `table` WHERE id=a.id AND year='2022') AS pcs2022,
    (SELECT sum(dollars) FROM `table` WHERE id=a.id AND year='2022') AS dollars2022
FROM `table` AS a
GROUP BY id
;

结果是:

*注意如果未将Table括起来,则将Table用作表名将导致语法错误,因为Table是SQLite关键字。

相关问题