【问题标题】:MySQL Order by subquery columnMySQL 按子查询列排序
【发布时间】:2015-03-05 15:32:31
【问题描述】:

我的 sql 查询有问题。我们的想法是选择付款后(状态 1/2/3)在 8 到 21 天之间的所有贷款,计算值从 payment_day 到现在。

我已经完成了一些查询,但不能在 WHERE 部分使用列 days_after_payment 和 days_after_part_payment。我希望有一个基于贷款类型的列,例如 days_after_payment。

SELECT l.*,
(SELECT SUM(`value`) FROM `loan_part` WHERE `loan_id` = l.id AND `paid`=0) AS left_to_pay, 
-(DATEDIFF((SELECT date FROM `loan_part` WHERE `loan_id` = l.id AND `paid`=0 AND `date`<CURDATE() ORDER BY `date` LIMIT 1), NOW())) AS days_after_part_payment,
-(DATEDIFF(l.payment_date, NOW())) AS days_after_payment
FROM loan l
WHERE (l.type=1 or l.type=2) AND (l.status=1 OR l.status=2 OR l.status=3)
GROUP BY l.client_id
ORDER BY 
CASE l.type 
    WHEN 1 THEN days_after_payment
    WHEN 2 THEN days_after_part_payment
    ELSE 1 END 
ASC

CREATE TABLE IF NOT EXISTS `loan` (
  `id` int(11) NOT NULL,
  `value` int(11) NOT NULL,
  `client_id` int(11) NOT NULL,
  `status` int(11) NOT NULL,
  `type` int(11) NOT NULL,
  `payment_date` date DEFAULT NULL  
) ENGINE=MyISAM AUTO_INCREMENT=2068 DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `loan_part` (
`id` int(10) unsigned NOT NULL,
  `loan_id` int(11) NOT NULL,
  `value` float NOT NULL,
  `date` date DEFAULT NULL,
  `paid` tinyint(1) NOT NULL DEFAULT '0'
) ENGINE=MyISAM AUTO_INCREMENT=1751 DEFAULT CHARSET=utf8;

更新1:我不得不删掉不必要的栏目,并用我的母语将它改写成英文。

【问题讨论】:

    标签: mysql sql subquery where


    【解决方案1】:
    ORDER BY 7
    

    “7”表示 SELECT 中的第 7 个字段。这也适用于GROUP BY。我必须查看表定义才能计算l.* 中有多少。

    id 怎么没有声明为AUTO_INCREMENT

    【讨论】:

    • 可能是我在导出结构时做错了什么。 ID 肯定是自动递增的。
    猜你喜欢
    • 1970-01-01
    • 2019-02-20
    • 2014-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-05
    • 2010-11-19
    相关资源
    最近更新 更多