SQLの数値への単位について

このQ&Aのポイント
  • SQLの数値への単位付け方と修正方法を教えてください
  • SQLでのcmやkgの単位付け方とUPDATE DELETEの実行方法について教えてください
  • SQLの数値への単位付け方とUPDATE DELETEの実行方法について教えてください
回答を見る
  • ベストアンサー

SQLの数値への単位について

現在SQLをpaizaにて実行してるのですが ・highにcm wightにkgの単位の付け方 ・UPDATE DELETEが上手く実行されない の二点の修正方法が分からず、どなたか教えて頂けないでしょうか? 「ソースコード」 create table employees(height integer, weight integer); INSERT INTO employees(height, weight) VALUES(170, 50); INSERT INTO employees(height, weight) VALUES(180, 90); INSERT INTO employees(height, weight) VALUES(165, 70); SELECT height FROM employees; SELECT height AS tall FROM employees; UPDATE employees SET height ='171' WHERE weight ='170'; DELETE FROM employees WHERE height ='180'; 「実行結果」 height 170 180 165 tall 170 180 165

  • MySQL
  • 回答数1
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • dell_OK
  • ベストアンサー率13% (740/5642)
回答No.1

paizaのことはわかりませんが、MySQLでしたら、 単位を付けて取得する方法はこんな感じでできます。 ---- SELECT CONCAT(height, 'cm'), CONCAT(weight, 'kg') FROM employees ---- UPDATEについては条件に一致するデータがないからではないでしょうか。 heightの170を171にするのでしたら、WHEREのweightをheightにしてみてください。 DELETEはについては問題なさそうに見えます。

asai555666
質問者

お礼

ありがとうございました。

関連するQ&A

  • SQLの抽出について

    現在、SQLの課題にとりくでいるのですが、paizaで ERROR 1054 (42S22) at line 9: Unknown column 'BMI' in 'where clause' この様なエラー表示が出てしまい、修正方法を教えて頂けないでしょうか? 「課題」 BMIの値が25以上の社員のみ抽出するよう変更せよ。  ただしBMIを算出する計算式は一箇所のみ(複数箇所に記載しないもの)とする。 「ソースコード」 create table employees(employeename varchar(100), height integer, weight integer); INSERT INTO employees(employeename, height, weight) VALUES ('後藤', 170, 50); INSERT INTO employees(employeename, height, weight) VALUES ('齋藤', 180, 90); INSERT INTO employees(employeename, height, weight) VALUES ('佐藤', 170, 80); select *, 10000 * weight / (height * height) AS BMI from employees WHERE BMI>=25;

  • SQLの結合について

    現在、SQLの結合についての課題にとりくでいるのですが、paizaで ERROR 1052 (23000) at line 17: Column 'departmentid' in on clause is ambiguous この様なエラー表示が出てしまい、修正方法を教えて頂けないでしょうか? 「課題」 問2 テーブルの結合 以下の情報を取得するSQLを作成してください。 部署名、社員名 「ソースコード」 create table employees(employeeid integer PRIMARY KEY, departmentid integer, employeename varchar(100), height integer, weight integer); INSERT INTO employees(employeeid, departmentid, employeename, height, weight) VALUES(11, 1, '後藤', 170, 50); INSERT INTO employees(employeeid, departmentid, employeename, height, weight) VALUES(12, 2, '齋藤', 180, 90); INSERT INTO employees(employeeid, departmentid, employeename, height, weight) VALUES(13, 3, '山田', 165, 70); create table departments(departmentid integer PRIMARY KEY, departmentname varchar(100)); INSERT INTO departments(departmentid, departmentname) VALUES(1, 'チームA'); INSERT INTO departments(departmentid, departmentname) VALUES(2, 'チームB'); INSERT INTO departments(departmentid, departmentname) VALUES(3, 'チームC'); SELECT employeename, departmentname FROM employees INNER JOIN departments ON departmentid = departmentname; SELECT employeename, departmentname FROM employees LEFT OUTER JOIN departments ON departmentid = departmentname;

  • 配列データに対する、要素の追加・削除方法

    PostgreSQLの配列に対して、要素の追加及び削除を行いたいのですが、下記のような動作をさせるには、※1と※2で、どのようなSQLを実行すれば良いでしょうか? よろしくお願いいたします。 >>> CREATE TABLE test ( id integer, data integer[] ); INSERT INTO test VALUES (1, '{0,1,2,3,4}'); INSERT INTO test VALUES (2, '{5,6,7,8,9}'); SELECT * FROM test; id | data ----+------------- 1 | {0,1,2,3,4} 2 | {5,6,7,8,9} (2 rows) UPDATE test [data配列に10を追加] WHERE id = 1; /* ※1 */ UPDATE test [data配列から6を除去] WHERE id = 2; /* ※2 */ SELECT * FROM test; id | data ----+------------- 1 | {0,1,2,3,4,10} 2 | {5,7,8,9} (2 rows) <<<

  • tutorial/funcs.sqlの中のSQL文

    の中に CREATE TABLE EMP ( name text, salary integer, age integer, cubicle point ); INSERT INTO EMP VALUES ('Sam', 1200, 16, '(1,1)'); INSERT INTO EMP VALUES ('Claire', 5000, 32, '(1,2)'); INSERT INTO EMP VALUES ('Andy', -1000, 2, '(1,3)'); INSERT INTO EMP VALUES ('Bill', 4200, 36, '(2,1)'); INSERT INTO EMP VALUES ('Ginger', 4800, 30, '(2,4)'); -- the argument of a function can also be a tuple. For instance, -- double_salary takes a tuple of the EMP table CREATE FUNCTION double_salary(EMP) RETURNS integer AS 'SELECT $1.salary * 2 AS salary' LANGUAGE SQL; SELECT name, double_salary(EMP) AS dream FROM EMP WHERE EMP.cubicle ~= '(2,1)'::point; というコードが有るのですが 最後のWHERE EMP.cubicle ~= '(2,1)'::pointの ~= はどういうもので どんなときにつかうのでしょうか? また単なる = ではエラーになるようなのですが=との使い分けはどのようにすれば良いのでしょうか? よろしくお願いします

  • 直近2年度連続で減少していない年度を抽出

    以下のテーブルの様に時系列が抜けているテーブルから直近2年度連続で減少していない年度を 抽出しようとしています。 /* year|sale --------- 1990|50 1992|50 1993|52 1994|55 1997|55 */ /* CREATE TABLE sales2 (year INTEGER NOT NULL , sale INTEGER NOT NULL , PRIMARY KEY (year)); INSERT INTO sales2 VALUES (1990, 50); INSERT INTO sales2 VALUES (1992, 50); INSERT INTO sales2 VALUES (1993, 52); INSERT INTO sales2 VALUES (1994, 55); INSERT INTO sales2 VALUES (1997, 55); */ 以下の記述で直近の年度までなら表示できているとは思うのですが2年連続となると やり方が思いつきません。誰かご教授いただけないでしょうか? select year,sale from sales2 s1 where sale >=(select sale from sales2 s2 where s2.year = (select max(year) from sales2 s3 where s1.year > s3.year)) order by year ;

  • 測定結果が決められた範囲内か判定するSQL文

    決められた範囲内に測定結果が入っているかを判定するSQL文(またはストアドプロシージャ)を PostgreSQL 14.0を使って作ろうとしていますが、正しい結果が得られません。 具体的には、ケーブル・テーブルとスペック・テーブルで一致するテスト項目同士(例えば、'Test_1'同士)だけを比較したいのですが、他のテスト項目も引っ掛けてしまいます。 あと、下記のwhere test_item = 'Test_1', 'Test_2', 'Test_3'の部分を select test_item from cable; から一つ一つ取り出してループで回して代入し、最終的には id | test_item | test ----+-----------+------ 1 | Test_1 | 1.5 2 | Test_1 | 1.8 2 | Test_2 | 2.5 という、まとまった出力を得たいのですが、その方法を教えていただけないでしょうか? 自作のテーブルとSQL文は以下になります: create table cable( id integer default 0 not null ,test_item varchar(30) not null ,test numeric(3, 1) ,primary key (id, test_item) ); insert into cable values(1, 'Test_1', 1.5); insert into cable values(1, 'Test_2', 4.5); insert into cable values(1, 'Test_3', 2.5); insert into cable values(2, 'Test_1', 1.8); insert into cable values(2, 'Test_2', 2.5); insert into cable values(3, 'Test_3', 2.5); create table spec( test_item varchar(30) not null , lower_spec numeric(3, 1) , upper_spec numeric(3, 1) , primary key(test_item) ); insert into spec values('Test_1', 1.0, 2.0); insert into spec values('Test_2', 2.0, 3.0); insert into spec values('Test_3', 3.0, 4.0); postgres=# select * from cable c WHERE c.test_item = test_item and test < (select upper_spec from spec where test_item = 'Test_1') and test > (select lower_spec from spec where test_item = 'Test_1'); id | test_item | test ----+-----------+------ 1 | Test_1 | 1.5 2 | Test_1 | 1.8 (2 行) postgres=# select * from cable c WHERE c.test_item = test_item and test < (select upper_spec from spec where test_item = 'Test_2') and test > (select lower_spec from spec where test_item = 'Test_2'); id | test_item | test ----+-----------+------ 1 | Test_3 | 2.5 ←'Test_3'なので引っ掛けたくない 2 | Test_2 | 2.5 3 | Test_3 | 2.5 ←'Test_3'なので引っ掛けたくない (3 行) postgres=# select * from cable c WHERE c.test_item = test_item and test < (select upper_spec from spec where test_item = 'Test_3') and test > (select lower_spec from spec where test_item = 'Test_3'); id | test_item | test ----+-----------+------ (0 行) 必要であれば補足します。 では、よろしくお願いします。

  • VBでSQL

    SQLでテーブル1に該当レコードがなければインサート あればアップデートをする処理をしたいのです IF ??? THEN UPDATE テーブル1 SET SELECT * FROM テーブル2 WHERE 条件 ELSE INSERT INTO テーブル1(SELECT * FROM テーブル2) END IF ???はプライマリキーで判定をしようと考えています こんな感じでやろうとしたところ うまくいきませんでした VB上で実行しよううとしているからなのでしょうか? ADOでSQLサーバに接続しています 条件分岐もどういう条件(VBでの書き方)がわからないです。 よろしくお願いします。

  • TO_NUMBERの結果は、カラムに追加できない?

    いつもお世話になっています。 TO_NUMBER実行時、結果はnumeric型で取得できると思うのですが、 その値をカラムに追加することはできるのでしょうか? insert into number2 values((select numberStr,TO_NUMBER (numberStr,'000.000') from number),'aaa'); 実行すると、 副問い合わせは1列のみを返さなければなりませんというErrorが生じます。 なのでwhere句を追加しましたが、結果は同じです。 実行したsqlは、 create table number ( count integer not null primary key, numberStr varchar(20) not null ); create table number2 ( no numeric not null primary key, numberS varchar(30) not null); insert into number values(5,'555.55000'); insert into number2 values((select numberStr,TO_NUMBER (numberStr,'000.000') from number where count=5),'aaa'); です。 宜しくお願いします。

  • 指定された趣味を持つメンバーがいるグループを抽出するSQL

    グループテーブル、メンバーテーブル、趣味テーブルの3つのテーブルがあります。 あるメンバーはあるグループに属しており、趣味を1つ持っています。 以下がそのSQLです。 CREATE TABLE groups ( g_id int primary key ); CREATE TABLE members ( m_id int primary key , g_id int , h_id int ); CREATE TABLE hobbies ( h_id int primary key, h_name text ); INSERT INTO groups VALUES ( 1 ); INSERT INTO groups VALUES ( 2 ); INSERT INTO groups VALUES ( 3 ); INSERT INTO members VALUES ( 1, 1, 1); INSERT INTO members VALUES ( 2, 1, 3); INSERT INTO members VALUES ( 3, 1, 4); INSERT INTO members VALUES ( 4, 1, 4); INSERT INTO members VALUES ( 5, 2, 1); INSERT INTO members VALUES ( 6, 2, 2); INSERT INTO members VALUES ( 7, 2, 3); INSERT INTO members VALUES ( 8, 3, 2); INSERT INTO members VALUES ( 9, 3, 3); INSERT INTO members VALUES ( 10, 3, 4); INSERT INTO hobbies VALUES ( 1, 'sports' ); INSERT INTO hobbies VALUES ( 2, 'music' ); INSERT INTO hobbies VALUES ( 3, 'book' ); INSERT INTO hobbies VALUES ( 4, 'drive' ); 指定された趣味を持つメンバーがいるグループを抽出するにはどうすればいいでしょうか? 例えば、「読書が趣味なメンバーとドライブが趣味なメンバーがいるグループは?」「グループ1とグループ3」のような感じです。 一応自分で考えてみたのが、以下ですが、これだと趣味の指定が増減すると大きくSQLが変わってしまいます。 もっといいやり方はないでしょうか? 私はPostgreSQL8を使ってますが、汎用的なSQLであれば、そっちの方がいいです。 SELECT distinct m.g_id FROM members m join hobbies h ON m.h_id = h.h_id where h.h_name = 'drive' INTERSECT SELECT distinct m.g_id FROM members m join hobbies h ON m.h_id = h.h_id where h.h_name = 'book';

  • SQL SERVER で大量データの削除

    delete from table1 where id = 1; delete from table1 where id = 2; delete from table1 where id = 3; もしくは、 delete from table1 where (id = 1) or (id = 2) or (id = 1) という具合のSQLを実行します。 条件は大体20万件程度です。 こちらを実行するとかなり遅いので、 なんとか一括で早く実行する方法はないものでしょうか? 今のところ、プログラムの都合上、プロシージャの中で行なってます。 PROCEDURE UPDATE(@DELSQL nvarchar(max)) EXEC (@DELSQL) @DELSQLに上記SQLが入ります。 大量のINSERTの時は、BULK INSERTのようなやり方があり、 回避できたのですが、困ってます。 どうかよろしくお願いします。