mysql - 如何通过 SQL 查询获取某些用户生成的列的结果?

标签 mysql sql

我有一个 Mysql 数据库,并且有 2 个表,其架构为:

CREATE TABLE IF NOT EXISTS `items` (
  `id` int(10) unsigned NOT NULL,
  `name` varchar(200) NOT NULL,
  PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `sold_records` (
  `id` int(10) unsigned NOT NULL,
  `item_id` int(10) NOT NULL,
  `count` int(10) NOT NULL,
  `sold_at` timestamp NOT NULL,
  PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;

如你所见,我有一些商品和一些销售记录,我想通过SQL查询得到这样的结果:

item_name   sold_count_at_today sold_count_at_yestoday ... sold_count_at_today - 30day
item_1                x                   x            ...        x
item_2                x                   x            ...        x
...
item_n                x                   x            ...        x

有人可以就通过 SQL 查询获得这样的结果提供一些建议吗?

你可以在SQLFiddle中调试它.

最佳答案

不幸的是,我认为你必须使用一堆 case 函数来完成此操作,如下所示:

SELECT i.name,
CASE WHEN CAST(sold_at AS date) = '2017-10-31' THEN 'X' ELSE NULL END AS '2017-10-31',
CASE WHEN CAST(sold_at AS date) = '2017-11-01' THEN 'X' ELSE NULL END AS '2017-11-01'
...
FROM items i
INNER JOIN sold_records r
ON i.id = r.item_id

我在你设置的 fiddle 上尝试过这个。您可以在这里查看:

http://sqlfiddle.com/#!9/92f796/19

关于mysql - 如何通过 SQL 查询获取某些用户生成的列的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47067411/

相关文章:

c# - Entity Framework 仅在更新时抛出异常 - 无效的对象名称 'dbo.BirdBrain.service'

php - MySQL 从 PHP 中重命名列

javascript - 为什么我的 PHP 数组没有作为数组发布到 JavaScript?

php - Mysql 减少查询次数

android - Android 上的 HttpPost 崩溃应用程序

sql - 根据时间值折叠多行

sql - 奇怪的 SQL2005 问题。 "SqlConnection does not support parallel transactions"

Mysql 存储过程不返回 VARCHAR 输出参数

c# - 存储过程的执行未运行

php - SQL 返回重复的行