|
Other people's experiences are irrelevant. The only way to prepare for an interview is to know the subject, and something about the company. If you do not know the subject, and do not have enough experience to answer the questions, then you are wasting both your and the potential employer's time. I say this from personal experience of many interviews in my professional career.
|
|
|
|
|
I don't WANT to give you an interview-advantage, because I don't know if you have the technical skills to match. If you do, you don't need the advantage.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
If your skills are commensurate with the position you're applying for, you should be able to answer pretty much any SQL question they throw at you.
The questions that will trip you up are the ones that HR gives you, like those insanely stupid puzzle questions.
".45 ACP - because shooting twice is just silly" - JSOP, 2010 ----- You can never have too much ammo - unless you're swimming, or on fire. - JSOP, 2010 ----- When you pry the gun from my cold dead hands, be careful - the barrel will be very hot. - JSOP, 2013
modified 19-Apr-19 9:53am.
|
|
|
|
|
I'm trying to extract some data using SQL queries from different tables I have already created. The tables are as follows:
CREATE TABLE Students
(
Student_ID INTEGER PRIMARY KEY,
Enrollment_Year DATE,
Course_Current_Status VARCHAR(18),
First_Name TEXT,
Last_Name TEXT,
Gender TEXT,
Date_Of_Birth DATE,
Email TEXT,
CourseCode INTEGER REFERENCES Courses(CourseCode)
);
CREATE TABLE Modules
(
Module_Code INTEGER PRIMARY KEY,
Module_Name TEXT,
Module_Credits INTEGER,
Module_Level INTEGER,
ConvenerID INTEGER REFERENCES Conveners(ConvenerID)
);
CREATE TABLE Enrollment
(
Marks_Obtained INTEGER,
Module_Code INTEGER REFERENCES Modules(Module_Code),
Student_ID INTEGER REFERENCES Students(Student_ID),
Program_Year_When_Enrolled TEXT,
PRIMARY KEY(Module_Code, Student_ID)
);
I want to show three columns with my query:
Student_ID, Average_Second_Year_Marks, Average_Third_Year_Marks, Overall_Marks
What I want to do is extract data for students graduating in 2017 i.e. the Course_Current_Status = 'Graduated-2017'.
For second year marks the Enrollment.Program_Year_When_Enrolled = 'Second' And for the third year marks the Enrollment.Program_Year_When_Enrolled = 'Third'. For the overall marks a new column would have to be created by the query i.e. Overall Marks which would be 1/3 of the second year marks and 2/3 of the third year marks.
What I'm using is as follows:
SELECT
Students.Student_ID,
AVG (Enrollement.Marks_obtained WHERE Enrollment.Program_Year_When_Enorolled = 'Third' ) AS avg_third_year_marks,
AVG (Enrollement.Marks_obtained WHERE Enrollment.Program_Year_When_Enorolled = 'Second' ) AS avg_second_year_marks
AVG (Enrollment.Marks_obtained = 1/3 * avg_second_year_marks + 2/3 * avg_third_year_marks) AS Overall_Marks
FROM
Students LEFT JOIN
Enrollment ON Students.Student_ID=Enrollment.Student_ID
WHERE
Students.Course_Current_Year='Graduated-2017'
GROUP BY
Students.Student_ID
|
|
|
|
|
You are going to have to split this into a query and a sub query (unless Richard comes in with a CTE).
Sub query should be everyting EXCEPT
AVG (Enrollment.Marks_obtained = 1/3 * avg_second_year_marks + 2/3 * avg_third_year_marks) AS Overall_Marks The averaging variables do not exist in the current structure until AFTER the query is run.
Then try:
Select *
from (put the sub query here) as SQ
You can then add the totaling column after the * because the subquery would have been run and the averaging values populated.
Never underestimate the power of human stupidity -
RAH
I'm old. I know stuff - JSOP
|
|
|
|
|
I'd recommend normalizing them first, and wait with defining operations until that is completed
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
It's always easier to help sort problems out if you also supply some sample data and expected results.
You are using the TEXT datatype for some key data items - this allows up to 2GB of text and is the wrong choice for things like names, emails etc. You also cannot compare or sort easily. Use Varchar instead e.g. VARCHAR(MAX) (Although that is also overkill, I usually use varchar(50))
You are using WHERE when you should be using CASE WHEN ... END
|
|
|
|
|
Hi all. I have two tables in access (VB6): SupplierInvoices & Sales. They both have 3 common field names: Date, Code & Qty. I need to query both tables via SQL query by a specific date range as follows (I know this is wrong, but just to give you an idea):
rs.Open "Select distinct format(SupplierInvoices.Date, 'dd-MMM-yyyy') as tDate, Sum(SupplierInvoices.QTY) as tTotal from SupplierInvoices, format(Sales.Date, 'dd-MMM-yyyy') as sDate, Sum(Sales.QTY) as sTotal from Sales where PLU = '" & lblPLU.Caption & "' and Date Between #" & StartTime & "# and #" & EndTime & "# Group by format(SupplierInvoices.Date, 'dd-MMM-yyyy');", cn, adOpenKeyset, adLockOptimistic
The result needs to return from both tables the sum of the qty fields for that date range. I can't get it right! Please help.
|
|
|
|
|
From the Lounge response
Quote: but it says "the field PLU could refer to more than one
Indicates that you need to prefix the PLU field (TableName.PLU) with a table name so the query knows which table to use.
Never underestimate the power of human stupidity -
RAH
I'm old. I know stuff - JSOP
|
|
|
|
|
Thanks Mycroft. I am using this one - trying to get it to work:
Select distinct format(SupplierInvoices.Date, 'dd-MMM-yyyy') as tDate, Sum(SupplierInvoices.QTY) as lTotal from SupplierInvoices where PLU = '" & lblPLU.Caption & "' and Date Between #" & StartTime & "# and #" & EndTime & "# Group by format(SupplierInvoices.Date, 'dd-MMM-yyyy') Union Select distinct format(Sales.Date, 'dd-MMM-yyyy') as tDate, Sum(Sales.QTY) as sTotal from Sales where PLU = '" & lblPLU.Caption & "' and Date Between #" & StartTime & "# and #" & EndTime & "# Group by format(Sales.Date, 'dd-MMM-yyyy')
Error is: Item sTotal cannot be found.
I appreciate any feedback (even if it's about vb6/access!)
|
|
|
|
|
Read up on what the UNION command does.
I could tell you what is not working here but you will find out much more if you read, understand than methodically practise what you have read and understood rather than throwing things together hoping they will work then asking for help when they don't work.
What the heck, I will tell you anyway - either change ITotal to sTotal or change sTotal to ITotal.
The column names for the unioned results need to be the same.
As an aside - I don't think that query is going to give you any information that is of any use as you are basically listing sales totals and dates together with invoice totals and dates with no ability to distinguish between what is a sales row and what is an invoice row.
I think you need to step away from the computer, read a book, follow tutorials and work out what you want to do on paper before typing SQL queries that you hope will somehow work.
“That which can be asserted without evidence, can be dismissed without evidence.”
― Christopher Hitchens
|
|
|
|
|
You are right, Guy.
At this stage I don't fully understand SQL and am attempting queries out of my depth of understanding!
Thank you for the encouragement.
|
|
|
|
|
Take it slowly and learn from the beginning - it's the classic thing of if you bite off more than you can at first chew you will be put off by it.
If you are diligent, within a couple of weeks you will be able to solve these sorts of issues without too much help.
Good luck!
“That which can be asserted without evidence, can be dismissed without evidence.”
― Christopher Hitchens
|
|
|
|
|
|
I am curious - is this a university or school project question?
I ask because the SQL you have is just not going to work - it's basically a word salad of SQL, a jumble of keywords in the wrong order and missing information.
I would suggest you step back and start learning the basics of SQL.
Also it will not be possible to anyone to help you with the information you have provided as you have not told us which columns are the primary and foreign keys within Sales and SupplierInvoices.
“That which can be asserted without evidence, can be dismissed without evidence.”
― Christopher Hitchens
|
|
|
|
|
I appreciate the feedback.
This is what is giving me headaches:
Select distinct format(SupplierInvoices.Date, 'dd-MMM-yyyy') as tDate, Sum(SupplierInvoices.QTY) as lTotal from SupplierInvoices where PLU = '" & lblPLU.Caption & "' and Date Between #" & StartTime & "# and #" & EndTime & "# Group by format(SupplierInvoices.Date, 'dd-MMM-yyyy') Union Select distinct format(Sales.Date, 'dd-MMM-yyyy') as tDate, Sum(Sales.QTY) as sTotal from Sales where PLU = '" & lblPLU.Caption & "' and Date Between #" & StartTime & "# and #" & EndTime & "# Group by format(Sales.Date, 'dd-MMM-yyyy')
It says Item sTotal cannot be found.
I am new to SQL and am trying to learn, hence asking on this forum.
|
|
|
|
|
BrunoPigeon wrote: I am new to SQL and am trying to learn, hence asking on this forum.
Ok there is something REALLY wrong with this. You are trying to learn SQL using the absolutely WRONG tools. As I said VB6 is dead, you will not get anything but bad memories from old farts who used to use it.
Access is not a suitable learning platform for SQL it has some weird stuff unique to Access. Port your database to SQL Server (there is a clear migration path) and use the proper tools to learn TSQL.
You are doing yourself a disservice continuing to use these tools as you will need to UNLEARN a lot of stuff. Besides there are a huge number of resources to help you with the current tool sets.
Never underestimate the power of human stupidity -
RAH
I'm old. I know stuff - JSOP
|
|
|
|
|
Excellent points.
I learnt SQL using Access and basically I learnt nothing of use.
Then when I picked up SQL Server and did the training courses, the world of SQL open up to me with its resplendent unicorn rainbows and... okay I am exaggerating a bit but I think you make some very good points in your comment.
“That which can be asserted without evidence, can be dismissed without evidence.”
― Christopher Hitchens
|
|
|
|
|
I know MyCroft! I am busy porting it over to MySQL but , GEEEEZ, alot must be changed in the code!
But yes, I agree vb6 is dead. It's just that I have an old program I still support. So hanging in there on the last threads of vb6!!
Thank you for your input - I really appreciate it.
Bruno
|
|
|
|
|
Have a look at my other comment where I explain what is going on.
I'd also suggest that you get into the habit of formatting your SQL so that is is easier to read.
Here's an example of a possible way of formatting your SQL:
Select
distinct format(SupplierInvoices.Date, 'dd-MMM-yyyy') as tDate,
Sum(SupplierInvoices.QTY) as lTotal
from SupplierInvoices
where PLU = '" & lblPLU.Caption & "'
and Date Between #" & StartTime & "# and #" & EndTime & "#
Group by format(SupplierInvoices.Date, 'dd-MMM-yyyy')
Union
Select
distinct format(Sales.Date, 'dd-MMM-yyyy') as tDate,
Sum(Sales.QTY) as sTotal
from Sales
where PLU = '" & lblPLU.Caption & "'
and Date Between #" & StartTime & "# and #" & EndTime & "#
Group by format(Sales.Date, 'dd-MMM-yyyy')
“That which can be asserted without evidence, can be dismissed without evidence.”
― Christopher Hitchens
|
|
|
|
|
I really appreciate all the things you said, Guy. Thanks a ton. I will dive into this this weekend and hopefully by Sunday, have a solution to my own question!
Take care & thanks for your valuable input.
Bruno
|
|
|
|
|
You're welcome.
You will get there - good on you for bearing with things!
“That which can be asserted without evidence, can be dismissed without evidence.”
― Christopher Hitchens
|
|
|
|
|
Cheers, brother! I will. You will be the first to know.
|
|
|
|
|
In Access I want to group and assign data according to conditions with 2 values 0 and 1 (true or false) and with the condition NGAYGIAO>= #01/01/2019# and NGAYGIAO <=# 31/01/2019# me How to write commands ? The data I put in the excel file consists of two sheets: Original data and Result, where Original data is the original data sheet that is the result of the problem I need, when running the access issue, ask you to help me with the problem. http://www.mediafire.com/file/hkkw519bw2k3o9h/baitap_data2.xls/file
|
|
|
|
|
Your problem description is not very clear, so it's hard to guess what you do and what you need...
However, you could rewrite your condition for NGAYGIAO as
NGAYGIAO BETWEEN #01/01/2019# AND #31/01/2019# which looks more readable.
|
|
|
|