1

我对以下请求有疑问!

要求:

SELECT COALESCE(date(date_field), 'Total') AS "date_field_group",
COUNT( id_field ) AS  "Nombre de bookings",
CONCAT( REPLACE( REPLACE( FORMAT( SUM( price1 ) , 2 ) , ',',  ' ' ) ,  '.',  ',' ) ,  ' €' ) AS  "Total à l'achat",
CONCAT( REPLACE( REPLACE( FORMAT( SUM( price2 ) , 2 ) ,  ',',  ' ' ) ,  '.',  ',' ) ,  ' €' ) AS  "Total à la vente",
CONCAT( REPLACE( REPLACE( FORMAT( SUM( price2 ) - SUM( price1 ) , 2 ) ,  ',',  ' ' ) ,  '.',  ',' ) ,  ' €' ) AS  'Marge',
CONCAT( REPLACE( FORMAT( (SUM( price2 ) / SUM( price1 ) ) , 2 ) ,  '1.',  '' ) ,  ' ',  '%') AS  "Markup moyen"
FROM table1 S, table2 B
WHERE status_field
IN ( "1",  "5")
AND DATE( date_field ) BETWEEN  "2011-08-01" AND  "2011-08-31"
AND type_field =  "H"
AND price1 IS NOT NULL 
AND S.id_field = B.id_field
AND B.id2 =  "1"
GROUP BY date_field_group WITH ROLLUP

问题是请求工作正常(正确的数字),但在最后一行中,我预计会进入第一行“Total”,而不是我得到一个字段 NULL ...

有人知道我的请求有什么问题吗?感谢您的帮助;)。

4

1 回答 1

1

您的查询几乎是正确的(除了使用隐式 SQL '89 连接,这是一种 SQL 反模式)

问题出在最后一行:GROUP BY ... WITH ROLLUP.
COALESCE(date(date_field), 'Total').
因此,在汇总出现时合并已经完成,您需要像这样重写查询:

SELECT COALESCE(date_field_group, 'Total') as date_field_group
  , `Nombre de bookings`
  , `Total à l'achat`
  , `Total à la vente`
  , `Marge`
  , `Markup moyen`
FROM (
   SELECT date(date_field) AS "date_field_group",   
     COUNT( id_field ) AS  "Nombre de bookings",   
     CONCAT( REPLACE( REPLACE( FORMAT( SUM( price1 ) , 2 ) , ',',  ' ' ) ,  '.',  ',' ) ,  ' €' ) AS  "Total à l'achat",   
     CONCAT( REPLACE( REPLACE( FORMAT( SUM( price2 ) , 2 ) ,  ',',  ' ' ) ,  '.',  ',' ) ,  ' €' ) AS  "Total à la vente",   
    CONCAT( REPLACE( REPLACE( FORMAT( SUM( price2 ) - SUM( price1 ) , 2 ) ,  ',',  ' ' ) ,  '.',  ',' ) ,  ' €' ) AS  'Marge',   
    CONCAT( REPLACE( FORMAT( (SUM( price2 ) / SUM( price1 ) ) , 2 ) ,  '1.',  '' ) ,  ' ',  '%') AS  "Markup moyen"   
  FROM table1 S
  INNER JOIN table2 B ON (S.id_field = B.id_field)   
  WHERE status_field IN ( "1",  "5")   
    AND DATE( date_field ) BETWEEN  "2011-08-01" AND  "2011-08-31"   
    AND type_field =  "H"   
    AND price1 IS NOT NULL    
    AND B.id2 =  "1"   
  GROUP BY date_field_group WITH ROLLUP ) AS subquery
于 2011-09-01T10:11:03.677 回答