php - 我如何使用 Join 而不是子查询来进行后续查询?

标签 php mysql join subquery

问候, 正如在这里和那里的许多帖子中看到的那样,子查询比加入慢......

但我找不到使用任何连接方法进行以下查询的方法。所以,我使用了子查询。

谁能告诉我如何在以下情况下正确使用连接:

表 1:

customerID, Name
1, abc
2, xyz
3, qwe
4, zxc
5, asd
and so on

表 2:

customerID, Month, OrderNumbers
1, jan, 5
1, feb, 6
2, jan, 8
3, feb, 5
4, mar, 3
and so on..

我需要做这样的报告:

customer id, name, jan order, feb order, mar order
1, abc, 5, 6, 0
2. xyz, 8, 0, 0
3. qwe, 0, 5, 0
and so on

我正在使用这个查询:

select table1.customerID,
       table1.Name,
       (select table2.Month as jan
         where table2.Month = jan),
       (select table2.Month as feb
         where table2.Month = feb),
       (select table2.Month as mar
         where table2.Month = mar)
  from table1 

但这并没有像它应该的那样工作......

那么,我该如何实现呢?

最佳答案

您的查询本质上需要从长到宽的 reshape 或枢轴转换,这可以通过条件聚合来完成:

SELECT 
    table1.customerID,
    table1.`name`,      

    SUM(CASE WHEN table2.`Month` = 'jan' THEN table2.`OrderNumbers` END) As 'jan order',
    SUM(CASE WHEN table2.`Month` = 'feb' THEN table2.`OrderNumbers` END) As 'feb order',
    SUM(CASE WHEN table2.`Month` = 'mar' THEN table2.`OrderNumbers` END) As 'mar order',
    SUM(CASE WHEN table2.`Month` = 'apr' THEN table2.`OrderNumbers` END) As 'arp order',
    SUM(CASE WHEN table2.`Month` = 'may' THEN table2.`OrderNumbers` END) As 'may order',
    SUM(CASE WHEN table2.`Month` = 'jun' THEN table2.`OrderNumbers` END) As 'jun order',
    SUM(CASE WHEN table2.`Month` = 'jul' THEN table2.`OrderNumbers` END) As 'jul order',
    SUM(CASE WHEN table2.`Month` = 'aug' THEN table2.`OrderNumbers` END) As 'aug order',   
    SUM(CASE WHEN table2.`Month` = 'sep' THEN table2.`OrderNumbers` END) As 'sep order',
    SUM(CASE WHEN table2.`Month` = 'oct' THEN table2.`OrderNumbers` END) As 'oct order',
    SUM(CASE WHEN table2.`Month` = 'nov' THEN table2.`OrderNumbers` END) As 'nov order',
    SUM(CASE WHEN table2.`Month` = 'dec' THEN table2.`OrderNumbers` END) As 'dec order'

FROM
    table1
LEFT OUTER JOIN 
    tabl2 ON table1.customerID = table2.customerID
GROUP BY 
    table1.customerID,
    table1.`name`

关于php - 我如何使用 Join 而不是子查询来进行后续查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34242904/

相关文章:

PHP 调用 Graphdb 在 shell 中工作,而不是在浏览器中工作

php - mysql UNION 重复值

PHP MySQL 之间的日期

php - 如何更新超过 30 秒或 30 分钟的行

php - 无法使用 mysqli_connect() 连接到数据库

mysql - 从 View 中的 SQL 子查询返回值列表

mysql - mysql获取一天的总工作时间

mySQL:如何处理3个不同的表,引用每个表中的不同列但使用主键

symfony - 使用 Doctrine 注释的 Symfony2 中的多个 JoinColumns?

sqlite - SELECT 语句中的条件子查询