3

私はこのようなSQLクエリを持っています:-

 REPLACE(
  GROUP_CONCAT( 
   IF( 
    (timediff(delta_ts,creation_ts) > '03:00:00')    
     && (priority='P5') ,bug_id,'')
     ),',,','' )
   AS exceeded_bugs
  from bugs
  ......

私が得た結果: -

超過したバグ: ,3743331,3743332,3743333

グループ連結のデフォルトの区切り文字は「,」であるため、別の区切り文字が必要です。スペースまたは「|」を使用してバグを区切る必要があります または「-」記号。

私は与えてみました:-

 REPLACE(
  GROUP_CONCAT( 
   IF( 
    (timediff(delta_ts,creation_ts) > '05:00:00')    
    && (priority='P6') ,bug_id,'')
    ) 
    ,SEPARATOR '-' ) 
   AS exceeded_bugs 
  from bugs
  .....

エラーが発生しました:-

SQL 構文にエラーがあります。'SEPARATOR '-' ) の近くで使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

グループ連結の sql 構文を別の区切り文字で修正するのを手伝ってください。

4

3 に答える 3

0

Samir の返信では、結果にハイフンが追加されていました。クエリを少し変更したところ、正確な結果が得られました。

サミールの質問:-

 select sum( 
    IF( (timediff(delta_ts,creation_ts) > '03:00:00') 
    && (priority='P5') ,1,0))   P5_time_exceeded,
    REPLACE(GROUP_CONCAT( IF( (timediff(delta_ts,creation_ts) > '03:00:00') 
    && (priority='P5') ,bug_id,'') SEPARATOR '-'),',,','' ) as exceeded_bugs 
    from bugs 
     ......

私が得た結果: -

P5_time_exceeded: 3                                                                                                                                  
超過したバグ: ---3743331-3743332-3743333--------------------------                                                                           
セットで 1 行 (0.00 秒)

変更されたクエリ

 select sum( 
   IF( (timediff(delta_ts,creation_ts) > '03:00:00') 
   && (priority='P5') ,1,0)) P5_time_exceeded,
   REPLACE(GROUP_CONCAT( IF( (timediff(delta_ts,creation_ts) > '03:00:00')
   && (priority='P5') ,bug_id,'') SEPARATOR '-'),'---','' ) 
   as exceeded_bugs 
   from bugs 
   where .....

正確な結果を得ました: -

P5_time_exceeded: 3
   超過したバグ: 3743331-3743332-3743333

繰り返し記号が来ないように、繰り返し記号 ,,, の最小倍数をスペース '' に置き換えています。

ありがとうサミール。

于 2013-06-27T11:41:40.073 に答える
0

REPLACEが必要かどうかわかりません。

GROUP_CONCAT は NULL フィールドを無視する必要がありますが、無視したい場合は空のオカレンスを入れています。'' を使用する代わりに、代わりに NULL を使用してみてください。

このような:-

SELECT SUM( IF( (TIMEDIFF(delta_ts,creation_ts) > '03:00:00') && (priority='P5') ,1,0)) AS P5_time_exceeded,
GROUP_CONCAT( IF( (TIMEDIFF(delta_ts,creation_ts) > '03:00:00') && (priority='P5'), bug_id, NULL) SEPARATOR '-') AS exceeded_bugs 
FROM bugs 
WHERE .....
于 2013-06-27T13:38:55.950 に答える