SQLite: GROUP_CONCAT() 関数を使って複数の列を結合する
SQLiteで2つの列を1つの列として選択する方法
方法 1: CONCAT() 関数を使用する
2つの列を結合するには、CONCAT()
関数を使用できます。この関数は、複数の文字列を1つの文字列に結合します。
SELECT CONCAT(first_name, " ", last_name) AS full_name
FROM users;
この例では、first_name
列と last_name
列を結合して、full_name
という新しい列を作成します。
方法 2: || 演算子を使用する
CONCAT()
関数と同様に、|| 演算子を使用して2つの文字列を結合することもできます。
SELECT first_name || " " || last_name AS full_name
FROM users;
この例は、CONCAT()
関数を使用した例と同じ結果を出力します。
方法 3: CASE 式を使用する
CASE
式を使用して、異なる条件に基づいて異なる値を返すことができます。
SELECT CASE WHEN gender = "M" THEN "Mr. " || first_name
WHEN gender = "F" THEN "Ms. " || first_name
ELSE first_name
END AS full_name
FROM users;
この例では、gender
列に基づいて full_name
列の値を設定します。
方法 4: サブクエリを使用する
サブクエリを使用して、2つの列を1つの列として選択することもできます。
SELECT (SELECT first_name || " " || last_name FROM users) AS full_name;
-- テーブル作成
CREATE TABLE users (
id INTEGER PRIMARY KEY,
first_name TEXT,
last_name TEXT,
gender TEXT
);
-- データ挿入
INSERT INTO users (first_name, last_name, gender) VALUES ("John", "Doe", "M");
INSERT INTO users (first_name, last_name, gender) VALUES ("Jane", "Doe", "F");
-- CONCAT() 関数を使用する
SELECT CONCAT(first_name, " ", last_name) AS full_name
FROM users;
-- || 演算子を使用する
SELECT first_name || " " || last_name AS full_name
FROM users;
-- CASE 式を使用する
SELECT CASE WHEN gender = "M" THEN "Mr. " || first_name
WHEN gender = "F" THEN "Ms. " || first_name
ELSE first_name
END AS full_name
FROM users;
-- サブクエリを使用する
SELECT (SELECT first_name || " " || last_name FROM users) AS full_name;
このコードを実行すると、次の結果が出力されます。
John Doe
Jane Doe
Mr. John Doe
Ms. Jane Doe
John Doe
Jane Doe
このコードは、SQLite で 2 つの列を 1 つの列として選択する方法を理解するための出発点として使用できます。
2つの列を1つの列として選択するその他の方法
GROUP_CONCAT() 関数は、グループ内のすべての値を 1 つの文字列に結合します。
SELECT GROUP_CONCAT(first_name || " " || last_name) AS full_names
FROM users
GROUP BY gender;
printf() 関数は、文字列をフォーマットして出力します。
SELECT printf("%s %s", first_name, last_name) AS full_name
FROM users;
CREATE VIRTUAL TABLE full_names AS
SELECT first_name || " " || last_name AS full_name
FROM users;
SELECT * FROM full_names;
CREATE FUNCTION full_name(first_name TEXT, last_name TEXT)
RETURNS TEXT
AS
BEGIN
RETURN first_name || " " || last_name;
END;
SELECT full_name(first_name, last_name) AS full_name
FROM users;
sqlite