gpt4 book ai didi

mysql查询将列拆分为m

转载 作者:行者123 更新时间:2023-11-30 00:55:42 25 4
gpt4 key购买 nike

我有以下数据库结构:

FieldID|Year|Value
a|2011|sugar
a|2012|salt
a|2013|pepper
b|2011|pepper
b|2012|pepper
b|2013|pepper
c|2011|sugar
c|2012|salt
c|2013|salt

现在我想运行一个查询来计算特定年份中每个项目的字段数量,如下所示:

value|2011|2012|2013
sugar|2|0|0
salt |0|2|1
pepper|1|1|2

我之前每年都使用多个表。然而,2011、2012 和 2013 年的不同值可能会有所不同(例如,糖仅在 2011 年出现)

对于我使用的个别年份:

SELECT `Value`, COUNT( `FieldID` ) FROM `Table` WHERE `Year`=2011 GROUP BY `Value`

最佳答案

A1ex07的回答很好。然而,在 MySQL 中,我更喜欢这种表述:

 SELECT Value, 
sum(`Year` = 2011) AS cnt2011,
sum(`Year` = 2012) AS cnt2012,
sum(`Year` = 2013) AS cnt2013
FROM t
GROUP BY value;

使用 count( . . . ) 会产生正确的答案,但这只是因为缺少 else 子句。默认值为 NULL,并且不会被计算在内。对我来说,这是一个容易出错的结构。

如果您想要标准 SQL 中的上述内容,我会选择:

 SELECT Value, 
sum(case when `Year` = 2011 then 1 else 0 end) AS cnt2011,
sum(case when `Year` = 2012 then 1 else 0 end) AS cnt2012,
sum(case when `Year` = 2013 then 1 else 0 end) AS cnt2013
FROM t
GROUP BY value;

关于mysql查询将列拆分为m,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20584623/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com