使用aggregate和union all时我的SQL查询结果问题

时间:2014-11-13 01:25:35

标签: mysql aggregate union-all

我对学生注册表有以下查询,其中包含student_id,first_name,enrollment_date(DATETIME),price(Float)作为列, 我的问题是当我在 MySQL 上运行此查询时,我得到了一个" BLOB"当存在价格值时,查询第一部分的价格列的值以及查询的第二部分中的价值列。

我想将结果提取到csv,并且不希望" NULL"在excel表中,因此我使用了IFNULL条件,这似乎是" BLOB"价格列上的价值。 如果我在价格列上没有IFNULL,我会得到" NULL"被设置为价格列。

如果我将IFNULL(价格,'')更改为IFNULL(价格,0),那么事情也可行,但我人为地提出了一个' 0'对于价格,当它为空时,我不想做...任何帮助?

   select 
      student_id AS AS `student_id`,
      first_name AS `first_name`,
      enrolment_date AS `enrolment_date`,
      IFNULL(price, '') AS `price`,
      IFNULL(price * 0.1, '') AS `gst`,
      IFNULL(price * 1.1, '') AS `price_ex_gst`
   from 
      student_enrolment
   where 
      student_id = 123 and 
      month(enrolment_date) = 10 
union all 
   select 
     student_id AS `student_id`,
     count(1) AS `count(1)`,
     'Total' AS `Total`,
     sum(`price`) AS `sum(price)`,    
     (sum(`price`) * 0.1) AS `gst`,
     (sum(`price`) * 1.1) AS `price_ex_gst`
   from 
      student_enrolment
   where 
      student_id = 123 and 
      month(enrolment_date) = 10 

1 个答案:

答案 0 :(得分:1)

我认为问题是数据类型。将价格转换为字符串,然后使用ifnull()

  IFNULL(format(price, 4), '') AS `price`,
  IFNULL(format(price * 0.1, 4), '') AS `gst`,
  IFNULL(format(price * 1.1, 4), '') AS `price_ex_gst`

作为备注:我会使用coalesce()而不是ifnull(),因为coalesce()是用于此目的的ANSI标准函数。

相关问题