【问题标题】:Using inner joins and aliases in mysql在 mysql 中使用内部连接和别名
【发布时间】:2015-05-08 01:28:02
【问题描述】:

我正在尝试连接同一张表中的几个不同的值。我正在尝试从不同的时间范围返回查询中的打印率(月/日/年/周等打印了多少),当我执行下面的查询时出现 1064 错误。怎么解释?

SELECT t1.station_name, t1.yearpages, t2.monthpages
FROM (
    SELECT station_name, SUM(print_pages) yearpages
    FROM `file_prints`
    WHERE year(print_date) = 2014;
) t1
INNER JOIN (
    SELECT station_name, sum(print_pages) monthpages
    FROM `file_prints`
    WHERE month(print_date) = 2;
) ON t1.station_name = t2.station_name;

那么,如果我要添加多个连接,查询会是这样吗?

SELECT t1.station_name, t1.station_name as db_name, t1.yearpages, t2.monthpages, t3.daypages, t4.weekpages
FROM (
    SELECT station_name, sum(print_pages) yearpages
    FROM `file_prints`
    WHERE year(print_date) = $year;
    GROUP BY station_name
) t1
INNER JOIN (
    SELECT station_name, sum(print_pages) monthpages
    FROM `file_prints`
    WHERE month(print_date) = $month;
    GROUP BY station_name
) t2 ON t1.station_name = t2.station_name 
INNER JOIN (
    SELECT station_name, sum(print_pages) daypages
    FROM `file_prints`
    WHERE dayofmonth(print_date) = $day;
    GROUP BY station_name
) t3 ON t2.station_name = t3.station_name
INNER JOIN (
    SELECT station_name, sum(print_pages) weekpages
    FROM `file_prints`
    WHERE week(print_date) = $week;
    GROUP BY station_name
) t4 ON t3.station_name = t4.station_name

【问题讨论】:

  • 您的第一个查询中间有一个分号 - 您的第二个查询也是如此。这可能是您的错误的原因。
  • WHERE month(print_date) = 2; 去掉末尾的分号

标签: mysql inner-join


【解决方案1】:

只使用条件聚合怎么样?

SELECT station_name,
       sum(case when year(print_date) = $year then print_pages end) as yearpages,
       sum(case when month(print_date) = $month then print_pages end) as monthpages,
       sum(case when day(print_date) = $day then print_pages end) as daypages,
       sum(case when week(print_date) = $week then print_pages end) as weekpages
FROM `file_prints`
GROUP BY station_name;

【讨论】:

    猜你喜欢
    • 2011-07-03
    • 1970-01-01
    • 2012-07-25
    • 2017-08-30
    • 2011-04-20
    • 2016-04-27
    • 2020-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多