【问题标题】:SQL error while getting data from table by 'type' column按“类型”列从表中获取数据时出现 SQL 错误
【发布时间】:2021-07-02 02:00:17
【问题描述】:

我想在单个查询中按日期分组,但针对不同的数据。到目前为止我已经尝试过了:

$record_by_date = DB::select("SELECT SUM(amount) as 'amount', 
   cast(date as date) dateAdded  FROM expense_incomes WHERE (CASE WHEN 
   type='Expense' THEN 'Expense' WHEN type='Income' THEN 'Income' END AS Type) 
   GROUP BY cast(date as date)");

首先是正确的方法吗?我正在使用 CASE
其次,如果方法正确,我会出错,如何解决?

SQLSTATE[42000]:语法错误或访问冲突:1064 你有一个 SQL 语法错误;检查与您对应的手册 MariaDB 服务器版本,用于在 'AS Type 附近使用正确的语法 第 1 行的 GROUP BY cast(date as date)' (SQL: SELECT SUM(amount) as 'amount', cast(date as date) dateAdded FROM fee_incomes WHERE (CASE WHEN type='Expense' THEN 'Expense' WHEN type='Income' THEN '收入' END AS Type) GROUP BY cast(date as date))

【问题讨论】:

  • 你还需要这个问题的答案吗?
  • @MKhalidJunaid 谢谢,现在解决了

标签: sql database laravel


【解决方案1】:

你的 WHERE 子句中有一个错误,CASE 定义了类型,但它实际上并没有将它与任何东西进行比较,所以它有点像 WHERE(1)

【讨论】:

  • 如何按类型获取 SUM?
  • 删除WHERE,添加第三个结果列Type,并按两列分组cast(date as date)Type,用逗号分隔。
  • 去掉case语句,尝试按type分组
  • 我得到了 2021--04-04 的两条记录,当时 4 月 4 日既有支出又有收入
【解决方案2】:

看来您将 SQL 查询放到 DB::select();

尝试使用 DB::raw() 来获得想要的结果

$record_by_date = DB::raw("SELECT SUM(amount) as 'amount', 
   cast(date as date) dateAdded  FROM expense_incomes WHERE (CASE WHEN 
   type='Expense' THEN 'Expense' WHEN type='Income' THEN 'Income' END AS Type) 
   GROUP BY cast(date as date)"))->get();

Laravel Queries Docs

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-13
    • 2015-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-15
    • 2017-05-07
    • 2019-03-24
    相关资源
    最近更新 更多