0
SELECT COUNT(wash) AS HandHyCounts, COUNT(enex) AS EnExCounts,
(COUNT(wash)*100/COUNT(enex)) AS Performance, DATE_FORMAT(time, ?) AS groups 
FROM ((SELECT true AS enex, null AS wash, time FROM enexlive
WHERE time >= ? AND time <= ? AND unitid IN (?)) 
UNION ALL 
(SELECT null AS enex, true AS wash, time 
FROM washtablelive WHERE time >= ? AND time <= ? AND unitid IN (?))) AS t1 
GROUP BY groups ORDER BY groups;

MySQL が、データベース テーブルに表示されない Date_Format に対して 0 カウントを返すことは可能ですか?

例: 日付形式を %m-%d-%k に設定すると、月-日-時が表示され、2 月 26 日午後 1 時から 2 月 27 日午後 1 時までのタイムスタンプを持つデータを探しているとします。しかし、2 月 27 日の午前 5 時から 2 月 27 日の午後 1 時までのデータはありません。

SELECT COUNT(wash) AS HandHyCounts, COUNT(enex) AS EnExCounts,
(COUNT(wash)*100/COUNT(enex)) AS Performance, DATE_FORMAT(time, '%m-%d-%k') AS groups 
FROM ((SELECT true AS enex, null AS wash, time FROM enexlive
WHERE time >= '2013-02-26 13:50:33' AND time <= '2013-02-27 13:50:33' AND unitid IN ('6')) 
UNION ALL 
(SELECT null AS enex, true AS wash, time 
FROM washtablelive WHERE time >= '2013-02-26 13:50:33' AND time <= '2013-02-27 13:50:33' AND unitid IN ('6'))) AS t1 
GROUP BY groups ORDER BY groups;

これは私が得るものです:

+--------------+------------+-------------+----------+
| HandHyCounts | EnExCounts | Performance | groups   |
+--------------+------------+-------------+----------+
|           12 |         47 |     25.5319 | 02-26-13 |
|           87 |        268 |     32.4627 | 02-26-14 |
|           80 |        261 |     30.6513 | 02-26-15 |
|           71 |        275 |     25.8182 | 02-26-16 |
|           71 |        270 |     26.2963 | 02-26-17 |
|           58 |        154 |     37.6623 | 02-26-18 |
|           45 |        141 |     31.9149 | 02-26-19 |
|           53 |        281 |     18.8612 | 02-26-20 |
|           44 |        175 |     25.1429 | 02-26-21 |
|           29 |        140 |     20.7143 | 02-26-22 |
|           22 |        107 |     20.5607 | 02-26-23 |
|           26 |        139 |     18.7050 | 02-27-0  |
|           23 |         56 |     41.0714 | 02-27-1  |
|           23 |        154 |     14.9351 | 02-27-2  |
|           18 |        144 |     12.5000 | 02-27-3  |
|           19 |         93 |     20.4301 | 02-27-4  |
+--------------+------------+-------------+----------+

これは私が欲しいものです:

+--------------+------------+-------------+----------+
| HandHyCounts | EnExCounts | Performance | groups   |
+--------------+------------+-------------+----------+
|           12 |         47 |     25.5319 | 02-26-13 |
|           87 |        268 |     32.4627 | 02-26-14 |
|           80 |        261 |     30.6513 | 02-26-15 |
|           71 |        275 |     25.8182 | 02-26-16 |
|           71 |        270 |     26.2963 | 02-26-17 |
|           58 |        154 |     37.6623 | 02-26-18 |
|           45 |        141 |     31.9149 | 02-26-19 |
|           53 |        281 |     18.8612 | 02-26-20 |
|           44 |        175 |     25.1429 | 02-26-21 |
|           29 |        140 |     20.7143 | 02-26-22 |
|           22 |        107 |     20.5607 | 02-26-23 |
|           26 |        139 |     18.7050 | 02-27-0  |
|           23 |         56 |     41.0714 | 02-27-1  |
|           23 |        154 |     14.9351 | 02-27-2  |
|           18 |        144 |     12.5000 | 02-27-3  |
|           19 |         93 |     20.4301 | 02-27-4  |
|            0 |          0 |        NULL | 02-27-5  |
|            0 |          0 |        NULL | 02-27-6  |
|            0 |          0 |        NULL | 02-27-7  |
|            0 |          0 |        NULL | 02-27-8  |
|            0 |          0 |        NULL | 02-27-9  |
|            0 |          0 |        NULL | 02-27-10 |
|            0 |          0 |        NULL | 02-27-11 |
|            0 |          0 |        NULL | 02-27-12 |
+--------------+------------+-------------+----------+
4

1 に答える 1

1

はい。しかし、それは短すぎる答えです。

count()常に値を返しますNULL。これは、次のような単純なクエリで確認できます。

select count(*)
from information_schema.columns
where 1 = 0;

0これはではなく を返しますNULL

これは ANSI 準拠の動作であると確信しています。

一方、count()値による除算があります。この場合、MySQL はエラーを生成する代わりにNULLforを返します (他のデータベースが行う可能性があります)。0/0これを次のように簡単に模倣することもできます。

select count(table_name) / count(*)
from information_schema.columns
where 1 = 0;

これは、値を持つ 1 つの列を持つ 1 つの行を返しますNULL

于 2013-03-24T19:48:43.170 に答える