mysql - SQL查询来自同一个表的相关数据行

标签 mysql sqlite

我试图了解如何编写可以从同一个表返回相关数据行的 SQL 语句。

举例来说,我有一个名为“购买”的下表:

------------------------------
|ID | Customer | Date | Cost | 
------------------------------
 1  |   1      | Mon  | 20.0 
 2  |   1      | Tue  | 10.0 
 3  |   1      | Sat  | 23.0 
 4  |   2      | Thu  | 211.0 
 5  |   2      | Mon  | 24.0 
 6  |   2      | Sat  | 50.0 
 7  |   3      | Mon  | 34.0 
 8  |   3      | Sat  | 200.0 
 9  |   3      | Fri  | 90.0 

我想要每个客户在周六花费的数据以及他们在周一花费的相应数据,以便我获得以下数据:

Saturday: [23.0,50.0,200.0]
Monday: [20.0,24,0,34.0]

我该怎么做?我能做到:

从购买 WHERE Date=='Sat' 中选择成本从购买 WHERE Date=='Mon' 中选择成本 但这似乎不太令人满意,因为它取决于数据库给出结果的顺序,周六和周一可能都没有发生购买。

我为此目的调查了联接和并集,但它们似乎关心来自多个表的数据。

我确信有一个标准方法可以解决这个问题。

最佳答案

您可以将表连接到自身;这将为您提供所需的数据,但格式为

UserID, AmountSpentSat, AmountSpentMon

SQL:

select p1.Customer, p1.cost as AmountMon, p2.cost as AmountSat
from purchases p1, purchases p2
where p1.customer = p2.customer
and p1.date = "Mon"
and p2.date = "Sat"

这是一个有效的 sqlfiddle:http://sqlfiddle.com/#!2/367ef/1

请注意,我添加了一位仅在周六购物的新客户 (4),并且工作正常。

关于mysql - SQL查询来自同一个表的相关数据行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21029392/

相关文章:

php - 使用第一个表的自动递增 id 更新第二个表

mysql - 如何使用 , 分隔符更新 mysql 中的先前值

c - sqlite3_open 无法识别 C 中的 URI 文件名

java - 在 SQLite 中检索 TimeInMillis

windows - Windows 上的 SQLite DB 像互斥锁一样锁定且无需轮询

javascript - 从数据库中获取数据到js数组

mysql - 选择查询与 cte 的联合

mysql left join同表sum错误结果

C# 处理多种数据库类型?

sql - SQLite连接不起作用