0

この問題があり、解決できません:

テーブル "habitacions" には、各部屋について、ゲストが起床しなければならない時間 (列 "hora" および "minut") が記録されます。時刻が null 値の場合、ゲストを起こしてはなりません。誰かが起床しなければならない時間数を返す SQL 文を与えてください (列 "minut" は無視します)。目覚めたくないということは、新しい別の時間と見なされます。

CREATE TABLE vigilants(
nom VARCHAR(20) PRIMARY key,
edat integer);

CREATE TABLE rondes(
hora INTEGER,
planta INTEGER,
vigilant VARCHAR(20) REFERENCES vigilants,
PRIMARY KEY(hora, planta));

CREATE TABLE habitacions(
num INTEGER,
planta INTEGER,
places INTEGER,
hora INTEGER,
minut INTEGER,
PRIMARY KEY(num, planta),
FOREIGN KEY(hora, planta) REFERENCES rondes);`

クエリを解決するために必要なサブクエリの数を最小限に抑えるようにしてください。さらに、次の構文は使用できません。 - FROM または SELECT 内の SELECT。サブクエリ (WHERE 内の SELECT または HAVING) を使用できます - COUNT (COUNT. ..))、SUM (COUNT. ..)) などの集計関数の組み合わせ。・回避できればUNION。- 非標準関数 (NVL など) - CASE

例: この挿入:

INSERT INTO vigilants(nom, edat) VALUES ('Mulder', 32);
INSERT INTO vigilants(nom, edat) VALUES ('Scully', 30);

INSERT INTO rondes(hora, planta, vigilant) VALUES (7, 1, 'Mulder');
INSERT INTO rondes(hora, planta, vigilant) VALUES (8, 1, 'Mulder');
INSERT INTO rondes(hora, planta, vigilant) VALUES (7, 2, 'Mulder');

INSERT INTO habitacions(num, planta, places, hora, minut) VALUES (1, 1, 1, 7, 30);
INSERT INTO habitacions(num, planta, places, hora, minut) VALUES (5, 1, 1, 7, 30);
INSERT INTO habitacions(num, planta, places, hora, minut) VALUES (2, 1, 1, 8, 30);
INSERT INTO habitacions(num, planta, places, hora, minut) VALUES (3, 1, 1, null, null);
INSERT INTO habitacions(num, planta, places, hora, minut) VALUES (4, 1, 1, null, null);
INSERT INTO habitacions(num, planta, places, hora, minut) VALUES (1, 2, 1, null, null);

結果は 3 :) (7,8 および null)

たくさんタイ

4

1 に答える 1

2

coalesce()ヒント: で関数を使用できますcount(distinct)

したがって、次のようなものが許可されます。

select count(distinct coalesce(hour, -1))

NULL 値を -1 に置き換えますが、これは有効な値ではありません。これにより、探している効果が得られるはずです。

于 2013-02-23T21:35:59.717 に答える