如何构造一个MySQL查询,使用一个group by语句到SUM()值,还包括在求和值中使用的额外列?

fdx2calv  于 2023-05-28  发布在  Mysql
关注(0)|答案(1)|浏览(158)

如何构造一个MySQL查询,使用一个group by语句到SUM()值,还包括在求和值中使用的额外列?
我有一个mysql数据库和一个sales表。

CREATE TABLE `sales` (
  `user` varchar(255) DEFAULT NULL,
  `products_sold` int DEFAULT NULL,
  `location` varchar(255) DEFAULT NULL,
  `day` varchar(255) DEFAULT NULL
);

数据看起来像是...

user      | products_sold | location | day
Bob       | 10            | Mars     | Tuesday
Randy     | 12            | Venus    | Thursday
Bob       | 7             | Venus    | Thursday

请注意,这样做的目的是让数据库保持完全相同的结构。所以我不会为user或类似的东西添加新的外键表。它将保持简单和平坦,就像上面一样。
我想做的是构造一个SQL查询,它提供的结果显示:

  • 用户(Bob,Randy)
  • 为特定用户销售的产品的总数
  • 周二为用户售出的产品总数
  • 星期四为用户售出的产品总数因此,结果如下所示:
user      | total_sold | tuesday_total | thursday_total
Bob       | 17         | 10            | 7
Randy     | 12         | 0             | 12

我有一个SELECT语句,它成功地检索了前两列:

select user, sum(products_sold) as total_sold from sales
  group by user order by total_sold desc

这个查询检索我要查找的前两列,如下所示:

user      | total_sold
Bob       | 17        
Randy     | 12

所以我的问题是,我如何构造一个查询来检索后两列呢?任何帮助都是非常感谢的。

dkqlctbz

dkqlctbz1#

你要的是枢纽。
在Mysql中,你可以在一个sum中使用一个布尔表达式,所以在你的特定示例中添加到你现有的查询中:

select user, 
  sum(products_sold) total_sold ,
  sum((day = 'Tuesday') * products_sold) tuesday_total,
  sum((day = 'Thursday') * products_sold) thursday_total
from sales
group by user 
order by total_sold desc;

演示Fiddle

相关问题