嗨我正在尝试制作一个查询,它将从表中运行记录,并在两年之间工作正常,但我需要列出我搜索的所有值BETWEEN
查询
select SUM(price) FROM orders where year BETWEEN 2004 and 2009 GROUP BY year
2005 | 200
2006 | 100
2008 | 400
i am trying to show like this
2005 | 200
2006 | 100
2007 | 0
2008 | 400
2009 | 0
-- ----------------------------
-- Table structure for `orders`
-- ----------------------------
DROP TABLE IF EXISTS `orders`;
CREATE TABLE `orders` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`price` decimal(10,0) DEFAULT NULL,
`year` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;
-- ----------------------------
-- Records of orders
-- ----------------------------
INSERT INTO orders VALUES ('1', '200', '2005');
INSERT INTO orders VALUES ('2', '100', '2006');
INSERT INTO orders VALUES ('3', '400', '2008');
或者我是否需要在php中执行此操作以及某些循环或任何建议 谢谢你的帮助
答案 0 :(得分:2)
您需要一个可以外连接的辅助数字表。如果没有永久表,你可以使用派生表。
SELECT coalesce(SUM(o.price),0) AS price
FROM (SELECT 2004 AS yr
UNION ALL
SELECT 2005
UNION ALL
SELECT 2006
UNION ALL
SELECT 2007
UNION ALL
SELECT 2008
UNION ALL
SELECT 2009
)
y
LEFT JOIN orders o
ON y.yr = o.year
GROUP BY y.yr
答案 1 :(得分:1)
如果我理解你,你需要一份所有年份的清单,无论它们是否包含订单。
有几种方法可以做到这一点,但其中一种方法是创建另一个名为year year的表,并使用您可能需要的值填充它。
然后你可以加入这个表来获得所代表的所有年份,以及来自另一个表的总和。